这两个 await 调用有什么区别

Gre*_*ndy 2 .net c# async-await

我有以下代码:

async Task Main()
{
    Stopwatch sw = new Stopwatch();

    // Variante 1
    sw.Start();
    var m1 = await Task1();
    var m2 = await Task2();
    var m3 = await Task3();
    Console.WriteLine(m1);
    Console.WriteLine(m2);
    Console.WriteLine(m3);
    sw.Stop();
    Console.WriteLine(sw.ElapsedMilliseconds);

    // Variante 2
    sw.Restart();
    var t1 = Task1();
    var t2 = Task2();
    var t3 = Task3();
    m1 = await t1;
    m2 = await t2;
    m3 = await t3;
    Console.WriteLine(m1);
    Console.WriteLine(m2);
    Console.WriteLine(m3);
    sw.Stop();
    Console.WriteLine(sw.ElapsedMilliseconds);
}

// Define other methods, classes and namespaces here
public async Task<string> Task1()
{
    await Task.Delay(5000);
    return "Task1 ready";
}   

public async Task<string> Task2()
{
    await Task.Delay(5000);
    return "Task2 ready";
}

public async Task<string> Task3()
{
    await Task.Delay(5000);
    return "Task3 ready";
}
Run Code Online (Sandbox Code Playgroud)

第一部分导致近 15000 毫秒,第二部分导致 5000 毫秒,但我不明白为什么!

在第一部分我等待一个异步方法返回一个任务,在第二部分我得到这个任务并等待任务。

我错过了什么?

jas*_*hoe 5

在变体 2 中,所有三个任务在您调用await它们之前都已启动。在变体 1 中,您在开始下一个之前等待每个完成。