为了账号安全,请及时绑定邮箱和手机立即绑定

Task 中的异常属性何时可以有值?

Task 中的异常属性何时可以有值?

C#
尚方宝剑之说 2021-11-07 20:03:05
我想知道“continueWhith”什么时候有例外。我做了一个这样的代码。Task.Factory.StartNew(() =>{   if(HasException())       throw new Exception("Exception");   // Logic}).ContinueWith(x =>{   // Do something to UI.}, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _uiScheduler).continueWith(x =>{   if (x.Exception.IsNotNull()) // Exception handling here.     ShowExceptionMessage(x.Exception);            }我原以为最后 continueWith 任务会出现异常,但事实并非如此。最后continueWith任务中没有异常是对的吗?我想知道如何在 continueWith 中设置异常属性。
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

最后continueWith任务中没有异常是对的吗?

是的,因为它是“对 UI 做点什么”任务的延续。x.Exception如果第二个任务失败,只会有一个例外。

事实上,我不希望你达到任何一个延续,因为你的第一个任务总是出错,第一个延续明确说只有在它没有出错的情况下才执行。

备择方案:

  • 通过第二个任务的结果传播异常(如果有)

  • 将两个延续添加到原始任务,而不是链接它们。(这可能是您最初的意图,以便将故障路径和无故障路径分开。在这种情况下,将两个延续附加到第一个任务,并TaskContinuationOptions.OnlyOnFaulted用于第二个延续 - 那么您不需要在全部。)

  • 在原始任务中保留一个局部变量,以便您可以从第二个延续中获得该变量

理想情况下,我建议使用 async/await 而不是所有的 continuation 传递。它往往会使事情变得简单得多。


查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信