【问题标题】:What is the difference between WaitAll and WhenAll? [duplicate]WaitAll 和WhenAll 有什么区别? [复制]
【发布时间】:2014-12-21 06:46:28
【问题描述】:

我有这个代码:

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 all 时,我会得到我向数据库请求的所有元素。

何时使用WhenAll,何时使用WaitAll

【问题讨论】:

标签: c# asynchronous task


【解决方案1】:

MSDN 很好地解释了这一点。区别非常明确。

Task.WhenAll:

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

Task.WaitAll:

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

所以,本质上,WhenAll 给你一个任务,直到你给它的所有任务都完成后才完成(并允许程序立即继续执行),而WaitAll 只是阻塞并等待所有您传递完成的任务。

【讨论】:

    【解决方案2】:

    WhenAll 返回一个任务,一旦所有指定任务完成,您就可以ContinueWith。你应该这样做

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

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

    【讨论】:

    • 这里使用ContinueWith与只在返回的任务上使用await有什么区别?
    猜你喜欢
    • 2021-04-06
    • 2014-09-27
    • 2011-09-01
    • 1970-01-01
    • 2015-11-23
    • 2013-02-13
    • 2011-04-26
    • 2016-09-24
    相关资源
    最近更新 更多