并发调用
通过首先调用等待的任务然后等待它们,可以同时等待多个调用。
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
将完成。