AggregateException - AggregateException.Flatten()。InnerException表示什么?

时间:2012-11-26 18:23:51

标签: c# multithreading exception exception-handling task

我一直在查看我们的一个应用程序中的一些代码,如下所示:

catch (AggregateException ae)
{
    this._logger.Log(ae.Flatten().InnerException.ToString(), Category.Exception, Priority.High);
}

我的问题是这个。我知道AggregateException.Flatten()做了什么,我知道AggregateException.Flatten().InnerExceptions代表什么。但是,AggregateException.Flatten().InnerException(单个)代表什么?

1 个答案:

答案 0 :(得分:37)

它只是原始异常中非聚合异常的一个。例如,如果您有一个初始AggregateException

AggregateException
    AggregateException
        IOException("x")
        IOException("y")
    IOException("z")

然后,展开结果的InnerException将显示为IOException("x")IOException("y")IOException("z")。我不相信哪个会有任何保证。 (我相信目前的行为会给出“z”版本......)它将是展平版本InnerExceptions中的第一个,但应该被视为联盟,没有保证订单。

基本上InnerExceptionAggregateException并不十分有用。记录所有 InnerExceptions ...或者只是在顶级异常上调用ToString()会更有用,这将保留所有结构... < / p>