Mar*_*son 9 asp.net multithreading timeout
我已经尝试了一些关于这个主题的谷歌搜索,但我想有更多的信息.
我正在尝试在ASP.NET应用程序中启动一个新线程,它将负责一些需要很长时间的工作.如果我把它放在我的web.config中:
<httpRuntime executionTimeout="5" />
Run Code Online (Sandbox Code Playgroud)
常规请求将在5秒后超时.记住这是用于测试.当我从代码中启动一个新线程时:
var testThread = new Thread(new ThreadStart(CustomClass.DoStuffThatTakesLongTime));
testThread.Start();
Run Code Online (Sandbox Code Playgroud)
这个线程将运行超过5秒,这就是我想要的.但.它将运行多长时间?假设这个线程需要5h(仅作为示例).什么时候线程会被杀死?它会一直运行,直到应用程序池被回收?或者还有什么可以杀死这个帖子吗?
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)删除应用程序子目录