我有以下代码,并且不确定是否要一次运行一个任务,还是同时运行所有任务,然后等待所有任务完成。

    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,如何编写相同的代码来完成相反的工作?

最佳答案

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

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

关于c# - 等待任务列表,一次一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38924000/

10-10 21:18