可能重复:
例外清单不能在.NET中被抓
正如记载,try / catch块无法处理StackOverflowException和OutOfMemoryException异常。
是否有其他异常也从这种限制的影响?
可能重复:
例外清单不能在.NET中被抓
正如记载,try / catch块无法处理StackOverflowException和OutOfMemoryException异常。
是否有其他异常也从这种限制的影响?
杰弗里里希特关于这一主题在他的书CLR通过C#,部分“交易可靠性生产力”提出了一些好点。
顺便说一句,你可以捕捉和处理OutOfMemmory:
出于某种原因,我不能完全解释,为.NET Framework编写代码时没有这样做对细节的关注。 获取内存外的一个情况始终是可能的,但我几乎从来没有看到一个包含catch块的任何代码从一个OutOfMemoryException恢复。 事实上,我甚至有一些开发商告诉我,CLR不让程序赶上一个OutOfMemoryException。 根据记录,这是绝对不正确的; 您可以捕获该异常。 事实上,有很多错误执行托管代码时是可能的,我几乎没有看到开发人员编写试图从这些潜在的故障中恢复的代码。
不能直接抓到唯一的例外是StackOverflowException(抛出一个框架)。 这是有道理的,在逻辑上,因为你没有在堆栈中的空间来处理在这一点例外。 从文档:
与.NET Framework 2.0版开始,StackOverflowException对象不能被一个try-catch块捕获和相应的过程默认情况下终止。
ThreadAbortException可以被捕获,但总是会得到重新复活,因此具有独特的行为。 从文档:
ThreadAbortException是一个特殊的例外,可以被捕获,但它会自动在catch块结束时再次提出。
参考: 例外清单不能在.NET中被抓