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

我想知道“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 中设置异常属性。


尚方宝剑之说
浏览 164回答 1
1回答

牛魔王的故事

最后continueWith任务中没有异常是对的吗?是的,因为它是“对 UI 做点什么”任务的延续。x.Exception如果第二个任务失败,只会有一个例外。事实上,我不希望你达到任何一个延续,因为你的第一个任务总是出错,第一个延续明确说只有在它没有出错的情况下才执行。备择方案:通过第二个任务的结果传播异常(如果有)将两个延续添加到原始任务,而不是链接它们。(这可能是您最初的意图,以便将故障路径和无故障路径分开。在这种情况下,将两个延续附加到第一个任务,并TaskContinuationOptions.OnlyOnFaulted用于第二个延续 - 那么您不需要在全部。)在原始任务中保留一个局部变量,以便您可以从第二个延续中获得该变量理想情况下,我建议使用 async/await 而不是所有的 continuation 传递。它往往会使事情变得简单得多。
打开App,查看更多内容
随时随地看视频慕课网APP