我想知道“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 传递。它往往会使事情变得简单得多。
- 1 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消