Wann kann eine AggregateException mehr als eine innere Ausnahme enthalten?

8

Ich habe eine Frage bezüglich der Fehlerbehandlung der .NET Task Parallel Library. In welchen Fällen wird AggregateException mehr als 1 innere Ausnahme enthalten? Ich weiß, das kann zum Beispiel passieren. beim Aufruf von Task.WaitAll(anArrayOfTasks) , und 2 oder mehr Tasks werfen eine Exception, aber gibt es noch andere Fälle (dh, kann es möglich sein, dass, wenn nur auf 1 Task gewartet wird, Sie mehr als 1 innere Exceptions erhalten)? / p>     

scripni 28.03.2012, 06:29
quelle

2 Antworten

4

Eine Aufgabe kann eine Sammel-Ausnahme auslösen, die inhärent mehrere innere Ausnahmen enthalten kann. Dies bedeutet, dass Sie bei der Arbeit mit Aufgaben immer eine Sammelausnahme mit mehreren inneren Ausnahmen berücksichtigen sollten. Selbst wenn Sie Task.WaitAll nicht verwenden, wartet die Aufgabe, auf die Sie warten, möglicherweise intern auf mehrere Teilaufgaben. Alternativ kann die Aufgabe, auf die Sie warten, möglicherweise mehrere Ausnahmen zurückgeben. Sie können einfach nicht als Anrufer wissen.

    
Polity 28.03.2012, 06:34
quelle
5

Dies kann passieren, wenn Sie eine "übergeordnete" Aufgabe und eine oder mehrere "untergeordnete" Aufgaben haben, die an die übergeordnete Person angefügt sind. Das bedeutet, dass die übergeordnete Aufgabe nur dann beendet wird, wenn alle untergeordneten Aufgaben abgeschlossen sind und die Ausnahmen von untergeordneten Aufgaben ebenfalls an die übergeordnete Aufgabe weitergegeben werden.

Nehmen Sie zum Beispiel den folgenden Code:

%Vor%

Wenn Sie für diese Aufgabe Wait() angeben, wird ein AggregateException angezeigt, das folgendermaßen aussieht:

  • %Code%
    • AggregateException : äußere
    • %Code%
      • Exception : inner

Wenn Sie nicht möchten, dass AggregateException s in Exception s enthalten ist, können Sie die Methode AggregateException . Es gibt auch eine andere Methode, die für die Verarbeitung von AggregateException s verwendet werden kann: Flatten() .

    
svick 28.03.2012 07:50
quelle