WaitAll和WhenAll有什么区别?

时间:2014-10-25 16:36:08

标签: c# asynchronous task

我有这段代码:

List<ComponentesClasificaciones> misClasificaciones = new List<ComponentesClasificaciones>();
            Task tskClasificaciones = Task.Run(() =>
                {
                    misClasificaciones = VariablesGlobales.Repositorio.buscarComponentesClasificacionesTodosAsync().Result;
                });

Task.WhenAll(tskClasificaciones);

List<ComponentesClasificaciones> misVClasificacionesParaEstructuras = new List<ComponentesClasificaciones>(misClasificaciones);

如果我使用Task.WhenAllmisClasificaciones没有任何元素,但是当我使用awit时,我获得了我向数据库请求的所有元素。

何时使用WhenAll以及何时使用WaitAll

2 个答案:

答案 0 :(得分:15)

MSDN很好地解释了这一点。差异非常明确。

Task.WhenAll

  

创建一个任务,该任务将在所有提供的任务完成后完成。

Task.WaitAll

  

等待所有提供的Task对象完成执行。

因此,基本上,WhenAll为您提供了一项任务,直到您完成的所有任务完成后才能完成(并允许程序执行立即继续),而WaitAll只是阻塞和等待你完成的所有任务完成。

答案 1 :(得分:14)

WhenAll返回完成所有指定任务后ContinueWith的任务。你应该做的

Task.WhenAll(tskClasificaciones).ContinueWith(t => {
  // code here
});

基本上,当您想要同步获取结果时使用WaitAll,当您想要启动新的异步任务以开始更多处理时使用WhenAll