Ich frage mich, hat jemand mit Fällen konfrontiert, wenn AggregateException.InnerExceptions.Count
& gt; 1?
Zum Beispiel umschließt TPL die Ausnahme, die im Aufgabenhauptteil in AggregateException
ausgelöst wurde. Aber ich habe niemals Situationen gesehen, wo es mehr als eine innere Ausnahme gab.
Wie kann das mit TPL erreicht werden?
Wie kann dies erreicht werden mit any FCL (oder einer anderen weit verbreiteten Bibliothek) Klassen (Beispiele werden nützlich sein)?
Ich weiß, dass es Möglichkeit gibt, eine solche Instanz von AggregateException
zu erstellen, aber die Frage betrifft eine Übung. Ich frage danach, weil ich verstehen möchte, wie man am besten mit AggregateException
umgehen kann.
Wie Ani gesagt hat, können diese AggregateExceptions
über mehrere aufeinanderfolgende Task
s erstellt werden, indem Fortsetzungen verwendet werden, um die Ausnahmen zu beobachten.
Normalerweise würden Sie das AggregateException
innerhalb einer Fortsetzung behandeln. Eine Fortsetzung kann herausfinden, ob der Antezedent Task
durch die Exception-Eigenschaft der Antecedent-Task eine Exception ausgelöst hat. Der folgende Ausdruck gibt die Ergebnisse von NullReferenceException
auf der Konsole aus
Wenn task1
eine Ausnahme auslöst und diese Ausnahme von der Folge nicht erfasst / abgefragt wird, wird sie als unbehandelt betrachtet und die Anwendung stirbt. Bei Fortsetzungen genügt es, das Ergebnis der Aufgabe über das Schlüsselwort Status
Wo ich oben nur eine einzige Ausnahme erwarte - um sicherzustellen, dass dies der Fall ist, kann ich Flatten()
. Wenn Sie andere Arten von Ausnahmen erwarten, können Sie die InnerException
s nach Bedarf durchlaufen.
Ich hoffe, das hilft.
Tags und Links .net c# exception-handling