C# 这是处理任务的AggregateException的错误方法吗
需要优雅地处理AggregateException。这样对吗C# 这是处理任务的AggregateException的错误方法吗,c#,exception-handling,C#,Exception Handling,需要优雅地处理AggregateException。这样对吗 try { var message = await _queue.ReceiveAsync(); // rest of code // var response = await process(body); } catch (AggregateException ae) { foreach (var e in ae.InnerExceptions) { Trace.Tr
try
{
var message = await _queue.ReceiveAsync();
// rest of code
//
var response = await process(body);
}
catch (AggregateException ae)
{
foreach (var e in ae.InnerExceptions)
{
Trace.TraceError(e.Message);
}
}
wait
unwrapsaggregateeexception
s,因此无需执行您正在执行的操作。然而,如果你做了var response=process(body).Result
,那么你的处理是必要的。正如@erikkallen所指出的,如果你使用wait
,你不应该得到聚合异常
但是,如果你不这样做,你就错了
聚合异常实际上可以是异常树(即,它可以包含其他aggregateeexceptions
,而这些异常反过来又包含更多异常,等等)。因此,您应该使用展平
:
foreach (var e in ae.Flatten().InnerExceptions)
请参阅MSDN上的