c#finalizer抛出异常?

时间:2010-04-22 15:09:12

标签: c# garbage-collection finalizer

来自MSDN:

如果Finalize或Finalize的覆盖引发异常,则运行时会忽略该异常,终止该Finalize方法,并继续完成最终化过程。

但如果我有:

~Person()
{
throw new Exception("meh");
}

然后它会导致运行时异常吗?

P.S。我知道这绝不会发生,但我只是对这种行为感到好奇。我们的一个客户在他们的所有终结器周围都有一个空的尝试。它甚至没有在出现问题或重置对象时记录:/

2 个答案:

答案 0 :(得分:22)

链接报价来源非常重要。我不得不假设它谈论的是旧版本的.NET,可能是版本1.x.它试图对未处理的例外情况进行“宽容”,吞没它们没有发出吱吱声。这样做效果不好,默认无效的代码块非常难以调试。

.NET 2.0版本结束了这一点,默认的CLR主机终止了应用程序的任何未处理的异常。终结者中的例外是致命的。

答案 1 :(得分:0)

我很好奇 xamarin 中发生了什么,因为我在生产中看到这种情况发生并且 android 应用程序没有崩溃,可能是在终结器线程上发生了锁定并且应用程序运行低于标准直到重新启动.