处理任务继续中某处抛出的异常的最佳方法是什么?
例如,我在下面有一个简单的任务延续(updateMessages
-> updateInterface
),但实际上这可能是一个超过 2 个任务的链。我想要一个通用的异常“全部捕获”任务,该任务从链中可能发生的任何故障继续。
我如何做到这一点是通过定义一个Action
(观察并记录异常)并从每个任务中继续TaskContinuationOptions.OnlyOnFaulted
设置。有没有更好的方法来做到这一点?
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());