我得到了以下方法:執行所有任務,即使一個拋出異常
public async Task PublishAsync<TApplicationEvent>(TApplicationEvent e)
where TApplicationEvent : ApplicationEvent
{
using (var scope = _container.CreateScope())
{
var implementations = scope.ResolveAll<IApplicationEventSubscriber<TApplicationEvent>>();
var tasks = implementations.Select(x => x.HandleAsync(e));
try
{
await Task.WhenAll(tasks);
EventPublished(this, new EventPublishedEventArgs(scope, e, true));
}
catch
{
EventPublished(this, new EventPublishedEventArgs(scope, e, false));
throw;
}
}
}
我以爲拋出異常之前的所有任務將被執行,但似乎該方法終止第一個任務時,拋出異常。
我可以配置WhenAll
執行所有任務並在返回之前生成帶有所有故障的AggregateException嗎?
那就是'WhenAll'做:「如果有任何的供應任務,在故障狀態下完成,返回的任務也將完成在故障狀態,其中它的異常將包含一套展開的聚集「)(http://msdn.microsoft.com/en-us/library/hh160384(v = vs.110).aspx) –