2016-06-01 6 views
1

Ich lade Daten mit einem Task. Im Falle eines Fehlers möchte ich dem Benutzer die Grundursache des Fehlers zeigen.Wie bekomme ich die Ursache des Ausnahmefehlers von einer AggregatedException

Ausnahmen, die bei der Ausführung Task auftreten, werden zu einer AggregatedException zusammengefasst. Also, was ist der beste Weg, um die Wurzel zu bekommen, die eine Ausnahme verursacht?

Mein aktueller Ansatz ist:

public static Exception GetRootCausingException(this AggregateException aggregatedException) 
{ 
    if (aggregatedException == null) 
     return null; 

    // get the AggregateException that is the root cause of this exception. 
    var exception = aggregatedException.GetBaseException(); 
    while (exception.InnerException != null) exception = exception.InnerException; 
    return exception; 
} 
+1

Die innerste Ausnahme oft nicht sinnvoll ist. Die äußeren fügen oft hinzu oder interpretieren Informationen. Sie sollten wahrscheinlich das Aggex entfernen und dann alle Ausnahmen (z. B. ToString) anzeigen. – usr

Antwort

0

Ein AggregatedException stellt eine oder mehrere Ausnahmen. Das bedeutet, dass Sie mehr als eine "root exception" haben können, so dass Sie mehrere Ausnahmen behandeln müssen und für jedes von ihnen nach dem Root-Problem suchen müssen.

Sie können es tun, um die Methode Verarbeitung von AggregatedException verwendet, die auf jede Ausnahme einen Handler ruft:

catch (AggregateException ae) { 
     ae.Handle((x) => 
     { 
      // look for the route cause of exception x 
     }); 
    } 

See the documentation

Verwandte Themen