ASP.NET何时会杀死一个新线程?

时间:2012-01-10 14:49:42

标签: asp.net multithreading timeout

我已经尝试了一些关于这个主题的谷歌搜索,但我希望有更多的信息。

我正在尝试在ASP.NET应用程序中启动一个新线程,它将负责一些需要很长时间的工作。如果我把它放在我的web.config中:

<httpRuntime executionTimeout="5" />

常规请求将在5秒后超时。记住这是用于测试。当我从代码中启动一个新线程时:

    var testThread = new Thread(new ThreadStart(CustomClass.DoStuffThatTakesLongTime));
    testThread.Start();

这个帖子的运行时间超过5秒,这就是我想要的。但。它将运行多长时间?假设这个线程需要5h(仅作为示例)。什么时候线程会被杀死?它会一直运行,直到应用程序池被回收?或者还有什么可以杀死这个帖子吗?

1 个答案:

答案 0 :(得分:9)

ASP.NET不知道您创建的线程 - 它将一直运行,直到AppPool被回收或完成。

由于ASP.Net不了解这个线程,但是如果服务器认为应该回收AppPool,可以在任何时候突然中止,这不是一件好事! Phil Haack wrote a blog post关于如何订阅'AppDomainIsGoingDown'事件。

关于导致这种情况的原因,我建议您阅读blog post by Tess Ferrandez,但简而言之,它们是:

  
      
  • 已安排这样做
  •   
  • 修改了Machine.Config,Web.Config或Global.asax
  •   
  • bin目录或其内容已修改
  •   
  • 重新编译的次数(aspx,ascx或asax)超出了machine.config或web.config中设置指定的限制(默认情况下设置为15)
  •   
  • 修改虚拟目录的物理路径
  •   
  • CAS政策已修改
  •   
  • 重新启动网络服务
  •   
  • (仅限2.0)应用程序子目录已删除
  •