15

引用 MSDN:

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

但是,如果我有:

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

那么它会导致运行时异常吗?

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

4

2 回答 2

25

链接报价来源很重要。我不得不假设它谈论的是旧版本的 .NET,也许是 1.x 版。它试图“容忍”未处理的异常,不吱声地吞下它们。那效果并不好,大量代码静默失败是非常难以调试的。

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

于 2010-04-22T15:21:26.573 回答
0

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

于 2021-05-06T04:07:35.590 回答