我想知道"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传递。它往往会让事情变得简单得多。