併發呼叫
通過首先呼叫等待的任務然後等待它們,可以同時等待多個呼叫。
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);
}
當 firstTask
,secondTask
或 thirdTask
完成時,RunConcurrentTasksWhenAny
返回的 Task
將完成。