併發呼叫

通過首先呼叫等待的任務然後等待它們,可以同時等待多個呼叫。

public async Task RunConcurrentTasks()
{
    var firstTask = DoSomethingAsync();
    var secondTask = DoSomethingElseAsync();

    await firstTask;
    await secondTask;
}

或者,Task.WhenAll 可用於將多個任務分組到單個 Task 中,該任務在其所有傳遞的任務完成時完成。

public async Task RunConcurrentTasks()
{
    var firstTask = DoSomethingAsync();
    var secondTask = DoSomethingElseAsync();

    await Task.WhenAll(firstTask, secondTask);
}

你也可以在迴圈內執行此操作,例如:

List<Task> tasks = new List<Task>();
while (something) {
    // do stuff
    Task someAsyncTask = someAsyncMethod();
    tasks.Add(someAsyncTask);
}

await Task.WhenAll(tasks);

要在使用 Task.WhenAll 等待多個任務之後從任務獲得結果,只需再次等待該任務。由於任務已經完成,它只會返回結果

var task1 = SomeOpAsync();
var task2 = SomeOtherOpAsync();

await Task.WhenAll(task1, task2);

var result = await task2;

此外,Task.WhenAny 可用於並行執行多個任務,如上面的 Task.WhenAll,不同之處在於,當完成任何提供的任務時,此方法將完成。

public async Task RunConcurrentTasksWhenAny()
{
    var firstTask = TaskOperation("#firstTask executed");
    var secondTask = TaskOperation("#secondTask executed");
    var thirdTask = TaskOperation("#thirdTask executed");
    await Task.WhenAny(firstTask, secondTask, thirdTask);
}

firstTasksecondTaskthirdTask 完成時,RunConcurrentTasksWhenAny 返回的 Task 將完成。