我知道Task.WaitAll(Task1,Task2)等待所有提供的Task对象完成执行。
什么是Task.WhenAll用于?
MSDN中的创建一个任务,该任务将在所有提供的任务完成时完成 完成。
什么是真实世界的场景,曾经可以应用Task.WhenAll()
答案 0 :(得分:8)
WaitAll
阻止调用线程,而WhenAll
提供了一个承诺任务,您可以使用异步等待async-await
,同时不会浪费线程:
async Task ProcessAsync()
{
await Task.WhenAll(DownloadAsync(), IntializeParserAsync(),...);
}
您应该在不需要阻塞线程的情况下使用WhenAll
,这样可以提高可伸缩性。 (阅读:几乎你可以在任何地方)
答案 1 :(得分:4)
WaitAll
是一个void
函数,可以让您的代码在您调用它时立即等待完成多个任务。
WhenAll
生成Task
,等待其运行时的其他任务。例如,如果您要构建一个需要初始化一些事情的Task
,然后运行一些计算,您可以这样做:
var initThenRun = Task
.WhenAll(initTask1, initTask2, initTask3)
.ContinueWith(computationTask);
现在initThenRun
任务将运行三个初始化任务,等待所有这些任务完成,然后才进入computationTask
。