我知道当应用程序池被回收或停止时,或者当进程退出时,我启动的所有线程都将被强制终止。我也知道IIS并非设计用于长期运行的任务。
在Global.asax中考虑以下内容
protected void Application_Start(object sender, EventArgs e)
{
_worker = new Thread(Run);
_worker.IsBackground = true;
_worker.Start();
}
private void Run()
{
while(true)
{
Thread.Sleep(50000);
WorkWork.BeHappyTo();
}
}
鉴于进程和应用程序池没有以任何方式关闭,IIS中是否有任何其他机制可以终止我的_worker
线程,但仍然继续提供新请求,好像什么也没发生?
我正在寻找监视与请求,CPU时间,时钟时间等无关的线程的任何机制,并根据一些启发式方法终止它们。
答案 0 :(得分:2)
不,只要应用程序域存在,您的主题就是安全的。终止应用程序的随机部分对于Web框架来说不是一个好的设计。事实上,没有.NET API可以枚举所有线程(感谢上帝)。
但是,您需要处理错误,因为错误将终止该线程。通常,记录它们并继续进行是正确的方法。应该查看日志。
我发现在应用程序之外进行基于时间的调度是一种更安全,更简单的模式。每隔5秒让一个cron调用一个秘密URL。