任务中的异常属性何时可以具有值



我想知道"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没有异常是对的吗?

是的,因为它是"对UI做点什么"任务的延续。只有当第二个任务失败时,x.Exception才会出现异常。

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

备选方案:

  • 通过第二个任务的结果传播异常(如果有(
  • 将这两个continuation添加到原始任务中,而不是将它们链接起来。(这可能是您最初的意图,以便将故障路径和未故障路径分开。在这种情况下,将两个延续都附加到第一个任务,并使用TaskContinuationOptions.OnlyOnFaulted进行第二个延续-那么您根本不需要异常检查。(
  • 在原始任务中保留一个局部变量,这样你就可以从第二个连续部分中得到它

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

相关内容

  • 没有找到相关文章