Chr*_*eis 6 .net continuations task task-parallel-library unobserved-exception
我有一个继续处理错误的任务:
var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
var loadTask = Task<List<OrderItemViewModel>>.Factory.StartNew(() =>
{
throw new Exception("derp");
});
var errorContinue = loadTask.ContinueWith(t =>
{
MainViewModel.RemoveViewModel(this);
}, CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, uiScheduler);
Run Code Online (Sandbox Code Playgroud)
连续命中,但几秒钟后我在应用程序中收到此错误:
通过等待任务或访问其Exception属性,未观察到任务的异常.结果,终结器线程重新抛出了未观察到的异常.
这与uiScheduler有关吗?类似问题的解决方案基本上就是我正在做的事情 .通过等待任务或访问其Exception属性,没有观察到任务的异常.结果,未观察到的例外是
您需要实际处理(或至少观察)异常:
var errorContinue = loadTask.ContinueWith(t =>
{
// Observe/acknowledge the exception.
// You can use t.Wait(), which throws, or just grab the exception
var exception = t.Exception;
MainViewModel.RemoveViewModel(this);
}, CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, uiScheduler);
Run Code Online (Sandbox Code Playgroud)
这是因为TPL中关于异常处理的这一系列文档:
如果您不等待传播异常的任务或访问其Exception属性,则在对任务进行垃圾回收时,将根据.NET异常策略升级异常.
在您的情况下,您有一个延续,但您实际上从未"等待异常"或访问它的异常属性.我的回答(在你发布的相关问题中)的作用是我实际上在通过continuation传递的Task上使用 Exception属性.
| 归档时间: |
|
| 查看次数: |
1557 次 |
| 最近记录: |