我有以下代码,我不确定它是否会在当时运行一个任务,或者同时运行所有这些代码,并等待所有这些代码到光洁度。
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的答案是什么,我怎么能写相同的代码来做相反的事情呢?
答案 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;
}
}