TPL und Ausnahmebehandlung

8

Alles, es gibt viele Fragen zum obigen Thema, aber ich glaube, das ist ausreichend anders, um eine neue Frage zu rechtfertigen. Ich habe die folgende Task und eine Fortsetzung, um mit einer Vielzahl von Aufgaben umzugehen Status ; TaskStatus.RanToCompletion , TaskStatus.Canceled und natürlich AggregateException via TaskStatus.Faulted . Der Code sieht wie

aus %Vor%

Das alles funktioniert gut, aber ich mache mir Sorgen, ob ich das richtig mache oder nicht, weil es die Möglichkeit gibt, dass ein AggregateException aus der Fortsetzung herausgeworfen wird - was dann?

Ich möchte nicht Wait auf meinem asyncTask noch die Fortsetzung, da dies die Rückkehr zum UI-Thread blockiert. Um irgendwelche Ausnahmen, die in einer Fortsetzung geworfen werden, zu fangen, kann das nicht bedeuten, dass ich so etwas unbedingt machen muss

%Vor%

Würde das überhaupt funktionieren? Was ist die beste Vorgehensweise hier?

Wie immer, danke für Ihre Zeit.

    
MoonKnight 27.03.2012, 09:46
quelle

2 Antworten

12

Sie können traditionelle try / catch innerhalb Ihrer Delegierten verwenden, die nach AggregateException suchen, oder Sie können bestimmte Fortsetzungen verketten, die nur dann ausgeführt werden, wenn der Antezedens mit der Option TaskContinuationOptions.OnlyOnFaulted fehlerhaft ist. Der letztere Ansatz ermöglicht die Definition sehr sauberer Aufgaben-Workflows. Zum Beispiel:

%Vor%     
Drew Marsh 27.03.2012, 15:29
quelle
2

Msdn hat ein ziemlich gut geschriebenes "How to" zum Thema: hier

Sie werden bemerken, dass sie einfach einen try/catch(AggregateException ) Block benutzen, dann die Ausnahme filtern, die sie in ae.Handle(lambda) zu handhaben wissen und die App stoppen, wenn es noch welche gibt, die nicht handhabbar sind.

    
Louis Kottmann 27.03.2012 09:55
quelle