0

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

谢谢你。

4

1 回答 1

4

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

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

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

备择方案:

  • 通过第二个任务的结果传播异常(如果有)
  • 将两个延续添加到原始任务中,而不是链接它们。(这可能是您最初想要的,以便将故障路径和无故障路径分开。在这种情况下,将两个延续附加到第一个任务,并TaskContinuationOptions.OnlyOnFaulted用于第二个延续 - 然后您不需要异常检查全部。)
  • 在原始任务中保留一个局部变量,以便您可以从第二个延续中获得该变量

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

于 2018-07-31T07:54:34.847 回答