处理任务延续中某处抛出的异常的最佳方法是什么?
例如,我在下面有一个简单的任务延续(updateMessages
- > updateInterface
),但实际上这可能是一个超过2个任务的链。我希望有一个通用异常“catch all”任务,它可以从链中可能出现的任何错误继续。
我是如何做到这一点的方法是定义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());
答案 0 :(得分:3)
你的方法是我使用的方法,而且效果很好。
一些与问题无关的旁白: