我读到了关于微软的终结器的故事,发现了一个有趣的句子:
如果finally或finally的覆盖会引发异常,并且运行时不被覆盖默认策略的应用程序承载,则运行库将终止该进程,并且不会执行活动的try--最终块或终结器将被执行。
我在谷歌上搜索了如何更改默认策略,但我仍然感到困惑:
微软在关于终结器的链接文章中提到的策略是什么?我怎么才能改变呢?对于当前正在执行的应用程序,是否可以以编程方式更改此策略?
注意:并不是说我想改变它以获得.NET 1.1终结器的行为。我只是好奇。当涉及到分析别人的bug时,了解这些细节总是很好的。
发布于 2014-02-27 15:25:31
当他们讨论:
运行库不是由覆盖默认策略的应用程序承载的。
他们谈论的是一个非托管应用程序,它使用CLR托管接口托管CLR,并允许托管代码在其中运行。例如,请参见Server及其CLR集成。
他们不是在谈论正在运行的托管应用程序可以更改的设置。
具体而言,请参见ICLRPolicyManager::SetUnhandledExceptionPolicy:
指定发生未处理异常时公共语言运行库(CLR)的行为。
和
默认情况下,CLR是所有未处理异常的最终处理程序,其默认行为是删除进程。主机可以通过将策略值设置为
eHostDeterminedPolicy来更改此行为。此值允许主机实现自己的默认行为,就像CLR的早期版本一样。
https://stackoverflow.com/questions/22072160
复制相似问题