为什么先将多个任务存储在var中然后等待它们会有所不同?
c#
鉴于此代码... 为什么 Main1() 需要约 1 秒而 Main2() 仅需要 500 毫秒?
为什么先将任务存储在变量中然后等待会有所不同?
async Task Main1()
{
await DoStuff(1);
await DoStuff(2);
}
async Task Main2()
{
var t1 = DoStuff(1);
var t2 = DoStuff(2);
await t1;
await t2;
}
async Task DoStuff(int number)
{
await Task.Delay(500);
Console.WriteLine(number);
}
回答
这与您是否将任务存储在变量中无关,而与您何时启动任务有关。在这种情况下:
async Task Main1()
{
await DoStuff(1); // Task 1
await DoStuff(2); // Task 2
}
等待任务 1 完成后开始任务 2 。请注意,调用会DoStuff 启动 task,并await 等待它完成。
在这种情况下:
async Task Main2()
{
var t1 = DoStuff(1); // Task 1
var t2 = DoStuff(2); // Task 2
await t1;
await t2;
}
您无需等待任务 1 完成即可启动任务 2,因此它们是异步执行的。
如果你这样做:
async Task Main3()
{
var t1 = DoStuff(1);
await t1;
var t2 = DoStuff(2);
await t2;
}
您将获得与Main1. 这表明您是否将任务放入变量并不重要。