【发布时间】:2017-03-02 17:53:58
【问题描述】:
我正在使用 .NET 4.0 构建 Windows 服务。
我在 Tasks 中抛出了各种未处理的异常,但它们并没有像 MSDN 文档所述那样终止我的进程(Parallel Tasks - 请参阅未观察到的任务异常)。
“如果你不给错误的任务传播它的机会 异常(例如,通过调用 Wait 方法),运行时将 根据当前升级任务的未观察到的异常 垃圾回收任务时的 .NET 异常策略。”
即使我使用最简单的任务调用,它的行为也是如此:
Task.Factory.StartNew(() => { throw new Exception(); }
服务在被调用时继续正常运行。
根据文档,一旦任务被 GC 处理,任务的终结器将重新抛出异常,但这似乎不会发生。 MSDN 反复声明正常的“.NET 异常策略”会导致进程终止。
为什么这不会终止我的应用程序?我唯一能想到的就是以某种方式引用了某处的任务(是 lambda 吗??)
【问题讨论】:
-
你强制GC了吗?终结器可能还没有运行。
-
我将再次尝试测试 GC.Collect。想我上次是通过 ContinueWith 调用它...
-
有趣的是,我正在查看 Task.cs 源代码(来自 MS 服务器和 Reflector),但我在代码中看不到终结器……我是盲目的,还是有其他方法可以完成它,还是文档错了?
标签: .net .net-4.0 task-parallel-library