C# 这是处理任务的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

需要优雅地处理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.TraceError(e.Message);
    }
}

wait
unwraps
aggregateeexception
s,因此无需执行您正在执行的操作。然而,如果你做了
var response=process(body).Result
,那么你的处理是必要的。

正如@erikkallen所指出的,如果你使用
wait
,你不应该得到
聚合异常

但是,如果你不这样做,你就错了

聚合异常实际上可以是异常树(即,它可以包含其他
aggregateeexceptions
,而这些异常反过来又包含更多异常,等等)。因此,您应该使用
展平

foreach (var e in ae.Flatten().InnerExceptions)
请参阅MSDN上的