什么是处理任务连续中抛出的异常的最佳方法?
例如,我有一个简单的任务连续(updateMessages -> updateInterface),但实际上这可能是一个超过2个任务的链。我想要一个通用的异常“捕获所有”任务,它可以从任何可能发生在链中的故障中继续执行。
我的做法是定义一个Action(观察和记录异常),并使用TaskContinuationOptions.OnlyOnFaulted从每个任务继续执行。也许有更好的方法吗?
例如,我有一个简单的任务连续(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());