最终没有在.net中执行的条件try..finally阻止

Not*_*tMe 46 .net exception-handling

基本上我听说某些条件会导致.net超越finally块.有谁知道这些条件是什么?

Haa*_*ked 50

两种可能性:

当存在a时,finally块将不会被执行,StackOverflowException因为堆栈上没有空间来执行更多代码.当有一个时ExecutionEngineException,它也不会被调用,这可能是由于呼叫而产生的Environment.FailFast().

  • OutOfMemoryException和ThreadAbortException怎么样? (4认同)
  • 也许值得注意的是ExecutingEngineException可能来自对Environment.FailFast()的调用. (3认同)
  • BTW我认为它应该是ExecutionEngineException而不是ExecutingEngineException? (3认同)

Gis*_*shu 15

除非CLR爆炸并且因ExecutingEngineException而崩溃(我在.net 1.1天中看到了一些只有适当数量的COM Interop :).我认为最终应该总是执行.


Chr*_*ris 6

您可以得到这样的情况:try块中的代码导致在输入try块之前抛出SecurityException(而不是在调用包含方法时抛出异常(请参阅http://msdn.microsoft.com/en-us) /library/fk6t46tz(VS.71).aspx)),在这种情况下,你甚至都不会进入try块,因此从不调用finally块中的代码.

其他可能性包括StackOverflowException和ExecutingEngineException.