4

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

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

4

1 回答 1

1

在损坏状态异常的上下文中,通常,您不能再假设任何事情都是真实的。这些异常的关键是发生了一些事情,通常是由于有错误的非托管代码,这违反了 Windows 或 CLR 对内存结构所做的一些核心假设。这意味着,理论上,CLR 用来跟踪内存中存在哪些应用程序域的结构可能已损坏。导致 CSE 的各种事情通常表明事情已经发生了灾难性的错误。

说了这么多,在某些情况下,在某些情况下,您也许可以确定可以安全地从特定例外情况继续。EXCEPTION_STACK_OVERFLOW例如,一个 可能是可恢复的,而一个通常EXCEPTION_ACCESS_VIOLATION表示 Windows在有机会搞砸任何事情之前就发现了一个潜在的错误。如果您愿意冒险,这取决于您自己,这取决于您对首先抛出 CSE 的代码了解多少。

于 2012-05-25T23:28:50.743 回答