AppDomain中的损坏状态异常(CSE)

时间:2012-05-25 21:55:10

标签: c# .net exception-handling corrupted-state-exception

对于某些背景信息,.NET 4.0默认不再捕获CSE:http://msdn.microsoft.com/en-us/magazine/dd419661.aspx

我正在开发一个在新AppDomain中执行代码的应用。如果该代码抛出一个CSE,如果没有处理,该异常会冒泡到主代码。我的问题是,我可以安全地假设第二个AppDomain上的CSE不会破坏主AppDomain中的状态,从而退出第二个AppDomain并继续运行主AppDomain吗?

1 个答案:

答案 0 :(得分:1)

在损坏的状态异常的上下文中,通常,您不能再认为任何是真的。这些例外的重点是发生了某些事情,通常是由于有缺陷的非托管代码,这违反了Windows或CLR对内存结构的一些核心假设。这意味着,理论上,CLR用于跟踪内存中存在哪些应用域的结构可能被破坏。导致CSE的事情通常表明事情已经发生了灾难性的错误。

说完所有这些,非正式记录,在某些情况下,您可能能够确定从特定例外继续是安全的。例如,EXCEPTION_STACK_OVERFLOW可能是可恢复的,而EXCEPTION_ACCESS_VIOLATION通常表示Windows在之前发现潜在的错误它有机会搞砸了。如果您愿意承担风险,这取决于您对首先抛出CSE的代码的了解程度。