C# 处理任务继续中某个位置引发的异常
处理任务延续中抛出的异常的最佳方法是什么 例如,我在下面有一个简单的任务延续(C# 处理任务继续中某个位置引发的异常,c#,.net,multithreading,exception-handling,task-parallel-library,C#,.net,Multithreading,Exception Handling,Task Parallel Library,处理任务延续中抛出的异常的最佳方法是什么 例如,我在下面有一个简单的任务延续(updateMessages->updateInterface),但实际上这可能是一个由两个以上任务组成的链。我希望有一个通用的异常“catch all”任务,它可以从链中可能发生的任何故障继续执行 我如何做到这一点是通过定义一个操作(观察并记录异常)并使用TaskContinuationOptions.OnlyOnFaulted集从每个任务继续。有没有更好的办法 Task updateMessages = Task.
updateMessages
->updateInterface
),但实际上这可能是一个由两个以上任务组成的链。我希望有一个通用的异常“catch all”任务,它可以从链中可能发生的任何故障继续执行
我如何做到这一点是通过定义一个操作
(观察并记录异常)并使用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());
Task updateMessages=Task.Factory.StartNew(()=>
{
//做事
});
Task updateInterface=updateMessages.ContinueWith(Task=>
{
//用户界面更新
},
System.Threading.CancellationToken.None,
TaskContinuationOptions.NotUnfault,
TaskScheduler.FromCurrentSynchronizationContext());
操作失败操作=新操作(失败任务=>
{
//观察并记录异常
});
updateMessages.ContinueWith(failureAction、CancellationToken.None、,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
updateInterface.ContinueWith(failureAction、CancellationToken.None、,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
您的方法就是我使用的方法,而且效果很好
以下是一些与问题无关的旁白:
- 您的failureAction真的需要在主UI线程上运行吗
- 我将编写一个helper方法来附加失败延续,因为每个任务都要这样做