2012-11-26 18 views
17

Ho cercato ad un certo codice in una delle nostre applicazioni che appare come segue:AggregateException - Che cosa rappresenta AggregateException.Flatten(). InnerException?

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

mia domanda è questa. So cosa fa AggregateException.Flatten() e so che cosa rappresenta AggregateException.Flatten().InnerExceptions. Tuttavia, cosa rappresenta AggregateException.Flatten().InnerException (singolo)?

risposta

35

Sarà solo uno dei non-AggregateExceptions all'interno l'eccezione originale. Così, per esempio, se si dispone di un primo AggregateException di:

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

Poi il InnerException del risultato appiattito sarebbe venuto fuori come uno IOException("x"), IOException("y") o IOException("z"). Non credo ci sia alcuna garanzia circa che sarebbe. (Credo che il comportamento attuale darebbe la versione "z" al momento ...) Sarà il primo di InnerExceptions nella versione appiattita, ma che dovrebbe essere visto come un unione di tutte le eccezioni originali non Aggregate , senza ordine garantito.

Fondamentalmente InnerException non è molto utile per AggregateException. Sarebbe molto più utile per accedere tutto la InnerExceptions ... o semplicemente chiamare ToString() sull'eccezione di livello superiore, che manterrebbe tutta la struttura ...

Problemi correlati