为什么先将多个任务存储在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. 这表明您是否将任务放入变量并不重要。


以上是为什么先将多个任务存储在var中然后等待它们会有所不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>