ASP.NET何时终止新线程



我试过在谷歌上搜索这个主题,但我想了解更多信息。

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

<httpRuntime executionTimeout="5" />

常规请求将在5秒后超时。记住这是为了测试。当我从代码开始一个新线程时:

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

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

ASP.NET对您创建的线程一无所知——它将运行,直到AppPool被回收或完成。

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

关于造成这种情况的原因,我建议阅读Tess Ferrandez的这篇博客文章,但简而言之,它们是:

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

相关内容

  • 没有找到相关文章