7

我阅读了 Phil Haack 关于使用IRegisteredObject接口确保后台线程在 AppDomain 关闭时完成的文章,并将其实现到我的代码中。但是,我不完全确定如何模拟 AppDomain 崩溃以对其进行测试。如何模拟 AppDomain 崩溃?

4

1 回答 1

9

让 AppDomain 关闭的最简单方法是让父进程停止。在 ASP.NET 中,您可以通过回收或停止运行代码的应用程序池来实现此目的。我们有一些代码可以确保日志记录被刷新,这就是我过去测试它的方式。

至于完全崩溃,我不太确定你该怎么做......托管环境会捕获异常,因此它可能不可行。您可以尝试Environment.Exit或者Environment.FailFast哪个会强制父进程立即退出?

编辑:我在这里忘记了最简单的选项......只需保存 Web.config - 这将触发 AppDomain 回收!

一些替补...

如果您使用 IIS 运行,则可以启动 IIS 管理器并按照以下步骤回收应用程序池...

  1. 在“站点”下方找到您的应用程序。它可能位于其中一个网站的下方——可能是一个虚拟目录。
  2. 右键单击应用程序并选择“管理应用程序”,然后选择“高级设置”。
  3. 记下“应用程序池”。
  4. 在“应用程序池”下方找到应用程序池。
  5. 右键单击它并点击回收。

对于 IIS Express,您只需右键单击托盘中的图标,在 UI 中您应该能够在此处停止应用程序。

对于 Visual Studio Development Server (Cassini),您还可以使用托盘停止应用程序。

于 2012-07-10T16:33:42.093 回答