C# WaitAll和WhenAll有什么区别?
我有以下代码:C# WaitAll和WhenAll有什么区别?,c#,asynchronous,task,C#,Asynchronous,Task,我有以下代码: List<ComponentesClasificaciones> misClasificaciones = new List<ComponentesClasificaciones>(); Task tskClasificaciones = Task.Run(() => { misClasificaciones = VariablesGlobales.Rep
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);
List misClasificaciones=new List();
Task tskClasificaciones=Task.Run(()=>
{
misClasificaciones=变量globales.Repositorio.BuscarComponentSCLASIFICACIONESTODOASync().Result;
});
Task.WhenAll(tskClasificaciones);
列表错误分类稀疏结构=新列表(错误分类);
如果我使用Task.whalll
,misclasificacions
没有任何元素,但当我使用awit all时,我会获得我请求数据库的所有元素
何时使用
whalll
以及何时使用WaitAll
?MSDN很好地解释了这一点。区别是相当明确的
:
创建一个任务,该任务将在所有提供的任务完成后完成
:
等待所有提供的任务对象完成执行
因此,本质上,
whalll
给你一个任务,这个任务在你给它的所有任务都完成之前是不会完成的(并且允许程序立即继续执行),而WaitAll
只是阻塞并等待您传递的所有任务完成。whalll
返回一个任务,您可以在所有指定任务完成后继续执行该任务。你应该做什么
Task.WhenAll(tskClasificaciones).ContinueWith(t => {
// code here
});
基本上,当您想要同步获取结果时,请使用WaitAll
,当您想要启动一个新的异步任务以开始更多的处理时,请使用WhenAll您可以等待
task.WhenAll而不阻塞调用线程。异常处理也不同,请查看在此处使用ContinueWith
与仅在返回的任务上使用wait
有什么区别?