WaitAll和WhenAll有什么区别?

Álv*_*cía 14 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*t P 19

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

Task.WhenAll:

创建将在所有提供的任务完成后完成的任务.

Task.WaitAll:

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

因此,基本上,WhenAll在完成所有任务之前完成任务(并允许程序执行立即继续),然后WaitAll只是阻塞并等待您完成的所有任务.


Dar*_*opp 17

WhenAll返回完成ContinueWith所有指定任务完成后可以执行的任务.你应该这样做

Task.WhenAll(tskClasificaciones).ContinueWith(t => {
  // code here
});
Run Code Online (Sandbox Code Playgroud)

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

  • 此处使用“ContinueWith”与仅在返回的任务上使用“await”有什么区别? (2认同)