asp.net - 为什么我的 ASP.NET 生成的工作线程会在 sleep 期间遇到 ThreadAbortException?

标签 asp.net iis iis-7.5 windows-server-2008-r2

我在 Windows Server 2008、IIS 7.5 上运行的 ASP.NET 应用程序中生成了一个工作线程,这个工作线程做的第一件事是休眠 N 秒,然后它开始真正的工作。在 sleep 期间,捕获一个 ThreadAbortException。

你能解释一下这种行为吗,你的加分点给我指出了可用于调整行为的任何 IIS/ASP.NET 设置。

编辑:更多信息。捕获 ThreadAbortException 的建议帮助我解决了这个问题,谢谢。我根据我学到的知识完全重写了这个问题的措辞,但仍然是同样的问题,为什么这个工作线程在 sleep 期间被中止?

最佳答案

一个 ThreadAbortException发生在您的工作线程上,因为其他人调用了 Thread.Abort 在它上面,所以它可能不是你的工作线程直接做的,而是一些外部原因。您应该检查的第一个地方是您自己的代码,用于您可能执行的任何线程管理或中止。否则,对于 IIS,这可能是由于工作进程 (w3wp.exe) 或应用程序池或 AppDomain 被回收。

回收可能是由于应用程序池的空闲超时设置、定期计划回收或内存/CPU 使用触发器。这些可通过服务器资源管理器中的 IIS 配置管理器(在 Win 2K8 上)或仅通过运行 inetmgr.exe 进行配置。根据苔丝的博客here ,AppDomain 回收还有许多其他原因:

  • Machine.Config, Web.Config or Global.asax are modified
  • The bin directory or its contents is modified
  • The number of re-compilations (aspx, ascx or asax) exceeds the limit specified by the setting in machine.config or web.config (by default this is set to 15)
  • The physical path of the virtual directory is modified
  • The CAS policy is modified
  • The web service is restarted
  • (2.0 only) Application Sub-Directories are deleted


该博客文章还提供了有关追踪回收发生原因的信息。对于初学者,请尝试查看事件日志 (eventvwr.msc) 以查看是否有任何详细信息。

您也可以尝试直接调试工作进程。将 VS 调试器附加到运行代码的 w3wp.exe 实例,在 Thread.Abort 上添加断点(您可能需要在调试器选项中启用“.NET Framework 源代码步进”),然后查看 Abort 的位置。源自使用调用堆栈窗口。这不会告诉你为什么会发生这种情况,但至少你会知道是谁在做这件事。

关于asp.net - 为什么我的 ASP.NET 生成的工作线程会在 sleep 期间遇到 ThreadAbortException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562257/

相关文章:

visual-studio - 在 http ://localhost/创建虚拟目录

redirect - IIS 7.5 重写错误?无限循环

windows - 尝试使用管理员以外的任何其他用户运行 DCOM 组件时服务器执行失败

c# - 如何在数据库中保存带有外键引用的字符串属性

asp.net - 我应该将 UCS2 或 UTF16 转换为 UTF 吗?

c# - 以编程方式创建 ASPX 页面的实例并解析 html

iis - 如何让 IIS 在我的网站上正确提供 .webmanifest 文件?

asp.net - 如何使用 Ajax 和 ASP.NET WebMethod 传递 JSON 对象

security - 如何保护用于让用户上传文件的文件夹?

iis - IIS 部署站点上的 Ingres 连接