Подтвердить что ты не робот

AggregateException - Что представляет собой AggregateException.Flatten(). InnerException?

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

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

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

4b9b3361

Ответ 1

Это будет просто одно из не-Агрегатных Исключений в исходном исключении. Например, если у вас есть начальный AggregateException из:

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

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

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