WaitAll和WhenAll有什么区别?
我有这个代码:
List misClasificaciones = new List(); Task tskClasificaciones = Task.Run(() => { misClasificaciones = VariablesGlobales.Repositorio.buscarComponentesClasificacionesTodosAsync().Result; }); Task.WhenAll(tskClasificaciones); List misVClasificacionesParaEstructuras = new List(misClasificaciones);
如果我使用Task.WhenAll
, misClasificaciones
没有任何元素,但是当我使用awit时,我得到了我向数据库请求的所有元素。
何时使用WhenAll
以及何时使用WaitAll
?
MSDN很好地解释了这一点。 差异非常明确。
Task.WhenAll :
创建一个任务,该任务将在所有提供的任务完成后完成。
Task.WaitAll :
等待所有提供的Task对象完成执行。
因此,基本上, WhenAll
为您提供的任务在您完成所有任务之前都没有完成(并允许程序执行立即继续),而WaitAll
只是阻塞并等待您传递完成的所有任务。
当所有指定的任务完成后, WhenAll
返回一个可以ContinueWith
的任务。 你应该这样做
Task.WhenAll(tskClasificaciones).ContinueWith(t => { // code here });
基本上,当您想要同步获取结果时使用WaitAll
,当您想要启动新的异步任务以开始更多处理时使用WhenAll