基本上我听说某些条件会导致.net超越finally块.有谁知道这些条件是什么?
两种可能性:
StackOverflowException
ExecutionEngineException
当存在a时,finally块将不会被执行,StackOverflowException
因为堆栈上没有空间来执行更多代码.当有一个时ExecutionEngineException
,它也不会被调用,这可能是由于呼叫而产生的Environment.FailFast()
.
除非CLR爆炸并且因ExecutingEngineException而崩溃(我在.net 1.1天中看到了一些只有适当数量的COM Interop :).我认为最终应该总是执行.
您可以得到这样的情况:try块中的代码导致在输入try块之前抛出SecurityException(而不是在调用包含方法时抛出异常(请参阅http://msdn.microsoft.com/en-us) /library/fk6t46tz(VS.71).aspx)),在这种情况下,你甚至都不会进入try块,因此从不调用finally块中的代码.
其他可能性包括StackOverflowException和ExecutingEngineException.