19

次のようなアプリケーションの 1 つのコードを見てきました。

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

私の質問はこれです。私は何をするAggregateException.Flatten()か、何AggregateException.Flatten().InnerExceptionsを表すかを知っています。しかし、AggregateException.Flatten().InnerException(シングル)は何を表しているのでしょうか?

4

1 に答える 1

39

元の例外内の非 AggregateExceptions の1 つになります。たとえば、次のイニシャルAggregateExceptionがあるとします。

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

次に、InnerException平坦化された結果の は、IOException("x")IOException("y")またはのいずれかになりIOException("z")ます。それがどうなるかについての保証はないと思います。(現在の動作では、現時点では「z」バージョンが提供されると思います...)これはフラット化されたバージョンの最初のものになりますが、それは元のすべての非 AggregateExceptions の結合InnerExceptionsと見なされるべきです。保証された順序。

基本的InnerExceptionにはあまり役に立ちませんAggregateExceptionすべてをログに記録する方がはるかに便利です...またはトップレベルの例外をInnerExceptions呼び出すだけで、すべての構造が保持されます...ToString()

于 2012-11-26T18:27:24.440 に答える