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
有什么区别?