最终无法在.net try..finally块中执行的条件
时间:2020-03-06 14:30:42 来源:igfitidea点击:
基本上,我听说某些条件会导致.net越过finally块。有谁知道这些条件是什么?
解决方案
除非CLR因ExecutingEngineException异常而崩溃(我在.net 1.1天内见过几次,并且COM互操作量适中:) ..我认为最终应该总是执行。
两种可能性:
- StackOverflowException
- ExecutionEngineException
当存在StackOverflowException时,finally块将不会执行,因为堆栈上没有空间可以执行更多代码。当存在ExecutionEngineException时也不会调用它,这可能是由于调用Environment.FailFast()引起的。
我们可能会遇到一种情况,即try块中的代码导致在进入try块之前引发SecurityException(相反,当调用contains方法时会引发异常(请参见http://msdn.microsoft.com/zh-cn /library/fk6t46tz(VS.71).aspx)),在这种情况下,我们甚至都不会输入try块,因此不会调用finally块中的代码。
其他可能性包括StackOverflowException和ExecutingEngineException。
还有Application.Exit方法。