gpt4 book ai didi

c# - 处理任务继续中某处抛出的异常

转载 作者:行者123 更新时间:2023-11-30 16:21:17 26 4
gpt4 key购买 nike

处理任务延续中某处抛出的异常的最佳方法是什么?

例如,我在下面有一个简单的任务延续 (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());

最佳答案

您的方法就是我使用的方法,效果很好。

一些与问题无关的旁白:

  • 您的 failureAction 真的需要在主 UI 线程上运行吗?
  • 我会编写一个辅助方法来附加失败延续,因为您将对每个任务执行此操作。

关于c# - 处理任务继续中某处抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com