等待一次一个任务列表

时间:2016-08-12 18:03:30

标签: c# async-await

我有以下代码,我不确定它是否会在当时运行一个任务,或者同时运行所有这些代码,并等待所有这些代码到光洁度。

    Dictionary<TemporaryAdditionalData, Exception> rejected = new Dictionary<TemporaryAdditionalData, Exception>();

    await Task.WhenAll(additionalData
        .SelectMaybe(async adda => 
            await this.InsertTemporallyAdditionalData(
                guid, adda.Order, adda.ID, adda.Value, adda.IsMandatory
            ), 
            out rejected
        ).ToArray()
    );

    return rejected;

我认为SelectMaybe方法在这里不相关,它只是LINQ Select的一个扩展,可以自动捕获异常并返回它们。

1)任务将逐个或全部同时运行?

2)无论1的答案是什么,我怎么能写相同的代码来做相反的事情呢?

1 个答案:

答案 0 :(得分:3)

任务将并行执行。如果您希望它们按顺序执行,您可以编写一个这样的简单循环:

foreach (var adda in additionalData) 
{        
    try 
    {
       await this.InsertTemporallyAdditionalData(
           guid, adda.Order, adda.ID, adda.Value, adda.IsMandatory
       );
    }
    catch (Exception ex) 
    {
         rejected[adda] = ex;
    }
}