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
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
Würde das überhaupt funktionieren? Was ist die beste Vorgehensweise hier?
Wie immer, danke für Ihre Zeit.
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:
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.
Tags und Links c# task-parallel-library exception-handling continuations