タスク継続のどこかでスローされた例外を処理する最良の方法は何ですか?
たとえば、以下の単純なタスクの継続 ( updateMessages
-> updateInterface
) がありますが、実際には、これは 2 つ以上のタスクのチェーンになる可能性があります。チェーンで発生する可能性のある障害から継続する一般的な例外「すべてをキャッチ」タスクが必要です。
私がこれを行う方法は、Action
(例外を監視してログに記録する) を定義し、 TaskContinuationOptions.OnlyOnFaulted
set を使用して各タスクを続行することです。おそらくこれを行うより良い方法はありますか?
Task updateMessages = Task.Factory.StartNew(() =>
{
// Do stuff
});
Task updateInterface = updateMessages.ContinueWith(task =>
{
// UI updates
},
System.Threading.CancellationToken.None,
TaskContinuationOptions.NotOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
Action<Task> failureAction = new Action<Task>(failedTask =>
{
// Observe and log exceptions
});
updateMessages.ContinueWith(failureAction, CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
updateInterface.ContinueWith(failureAction, CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());