关于多线程:ASP.NET何时会杀死一个新线程?

When will ASP.NET kill a new thread?

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

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

1
<httpRuntime executionTimeout="5" />

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

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

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


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

因为ASP.Net不知道这个线程,所以如果服务器认为它应该回收AppPool,它可能会在任何时候突然中止,这不是一件好事! Phil Haack撰写了一篇关于如何订阅"AppDomainIsGoingDown"活动的博文。

关于导致这种情况的原因,我建议您阅读Tess Ferrandez撰写的这篇博文,但简而言之,他们是:

  • It has been scheduled to do so
  • 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