2

Task Parallel Library を使用しており、Task Factory を使用して新しいタスクのリストを作成および開始しています。タスクを開始した後、Task.WaitAll(...) を呼び出して、すべてのタスクが戻るまで待機します。コードは次のようになります。

Tasks<MyClass>[] tasks = .../Create List of Tasks and Start using TaskFactory.StartNew(..) etc.

Task.WaitAll(tasks);         //Wait until all tasks complete before continuing. 

タスクが戻ってきて完了すると、それらが特定の基準を満たしていれば、結果がリストに集約され、後で処理されます。各タスクの実行中に、集計リストに追加されたタスクの結果を「不適格」にする特定の例外がスローされる場合があります。実行中のタスク内で例外をスローできるようにして、タスクが実行されないようにしたいと考えています。

特定のイベントを処理できるようにするためのキャンセル トークンやキャンセル ソースなどの機能があることは承知していますが、自分のやりたいことができないようです。存在しませんが、task.OnException や task.OnError などのタスクのイベント ハンドラーをサブスクライブするなどの機能があればよかったのにと思います。TPL でこの機能を実現するためのオプションは何ですか?

4

2 に答える 2

2

Task の実行が終了したら、Task.Exception プロパティを確認できます。

Task.Exception プロパティ

Task を実行している未処理の例外があった場合、Task.Exception は null ではなく、発生した 1 つ以上の例外の詳細を含む System.AggregateException になります。

各タスクで Task.ContinueWith を使用して、新しいタスクと TaskContinuationOptions.OnlyOnFaulted のフラグを渡すこともできます。この新しいタスクは、元のタスクで未処理の例外があった場合にのみ実行されます。

于 2012-07-24T02:37:56.647 に答える
0

TaskCompletionSourceを使用して、Task実行をもう少し細かく分割できます。次に、意志またはメソッドが実行される直前に発生するイベント (?) を公開できます。TaskCompletionSourceSetResultTryToSetException

于 2012-07-29T07:33:33.140 に答える