如文档所述,try / catch块无法处理StackOverflowException和OutOfMemoryException。
是否有其他例外情况也受此限制?
答案 0 :(得分:2)
由于某种原因我无法解释,写作时没有注意细节 .NET Framework的代码。总是可以获得内存不足的情况 然而,我几乎从未看到任何包含catch块的代码从中恢复 OutOfMemoryException异常。事实上,我甚至让一些开发人员告诉我CLR没有 让程序捕获OutOfMemoryException。为了记录,这绝对不是真的; 你可以抓住这个例外。实际上,执行时可能存在许多错误 托管代码,我几乎没有看到开发人员编写试图恢复的代码 这些潜在的失败。
答案 1 :(得分:0)
无法直接捕获的唯一异常是(抛出框架)StackOverflowException。从逻辑上讲,这是有道理的,因为您没有堆栈中的空间来处理此时的异常。来自文档:
从.NET Framework 2.0版开始,try-catch块无法捕获StackOverflowException对象,默认情况下会终止相应的进程。
可以捕获ThreadAbortException,但总是会重新引发,因此具有独特的行为。来自文档:
ThreadAbortException是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发。