什么时候激活异常并忘记在调用线程中引发任务?

时间:2016-10-26 12:25:11

标签: .net exception exception-handling .net-4.0 task-parallel-library

根据MSDN

  

如果您不等待传播异常或访问的任务   它的异常属性,异常根据提升而升级   任务被垃圾收集时的.NET异常策略。什么时候   然后,允许异常冒泡回到连接线程   任务可能会继续处理之后的某些项目   提出异常。

我假设Task类有一个引发异常的终结器。但是为什么以下似乎无限期地运行?

long collectionCount = 0;

Task.Factory.StartNew(() => { throw new NotImplementedException(); });

while (true)
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
    ++collectionCount;
}

1 个答案:

答案 0 :(得分:2)

自.Net Framework 4.5以来,unobserved exceptions from Tasks no longer crash the process when they are finalized。这意味着您的代码在.Net 4.5(或更新版本)上运行,因此您将获得新的非崩溃行为。