【发布时间】:2021-05-05 11:18:30
【问题描述】:
public class Program
{
public static void Main(string[] args)
{
Start();
Console.ReadLine();
}
private static async Task Start()
{
var m1 = method1();
var m2 = method2();
await Task.WhenAll(m1, m2);
}
private static async Task method1()
{
Console.WriteLine("Method1 - Start");
Thread.Sleep(1000);
Console.WriteLine("Method1 - End");
}
private static async Task method2()
{
Console.WriteLine("Method2 - Start");
Thread.Sleep(1000);
Console.WriteLine("Method2 - End");
}
}
上面的代码在下面返回
Method1 - Start
Method1 - End
Method2 - Start
Method2 - End
我想要这样的输出
Method1 - Start
Method2 - Start
Method1 - End
Method2 - End
如何实现,基本上如何并行运行异步方法
【问题讨论】:
-
用
await Task.Delay替换你的Thread.Sleep。 -
如果您想要“真正的”并行性,请使用 Task.Run 或在新线程上调用方法。异步本身并不是真正的并行性,并行度在很大程度上取决于实际方法的结构。想象一下,如果 method1() 在 await Task.Delay 之前执行了一个长时间运行的代码,它将是同步的,并且 method2() 将在该代码完成并遇到第一个 await 之前启动。
标签: c# asynchronous parallel-processing