AggregateException - что делает AggregateException.Выравнивать.)(Свойство innerexception представляете?

Я смотрел на некоторый код в одном из наших приложений, который выглядит следующим образом:

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

мой вопрос таков. Я знаю что!--1--> делает, и я знаю, что AggregateException.Flatten().InnerExceptions представляет. Однако что делает AggregateException.Flatten().InnerException (single) представляют?

1 ответов


это будет просто один из non-AggregateExceptions в исходном исключении. Так, например, если у вас есть первоначальный AggregateException of:

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

тут InnerException из сплющенного результата выйдет либо IOException("x"), IOException("y") или IOException("z"). Я не верю, что есть какие-либо гарантии о , который это будет. (Я считаю, что текущее поведение даст версию " z " на данный момент...) Это будет первый из InnerExceptions на сплющенная версия, но это следует рассматривать как Союз всех первоначально non-AggregateExceptions, без гарантированного заказа.

в принципе InnerException не очень полезно для AggregateException. Было бы гораздо полезнее войти все the InnerExceptions... или просто позвоните ToString() на исключении верхнего уровня, которое сохранило бы всю структуру...