日期:2014-05-17  浏览次数:20394 次

Web网站开后台线程,后台线程能一直运行到网站停止吗?
在Application_Start启动后台线程,N天没人访问网站的话,感觉后台线程会停掉....
如果后台线程真的会停掉有没什么好的解决办法?


后台线程的代码是类似于这样的,理论上是不可能停掉的:
C# code

        public static void ThreadStart()
        {
            while (true)
            {
                Thread.Sleep(interval);
                //.......
            }
        }




------解决方案--------------------
可以用别的方式实现。。类似。。服务
------解决方案--------------------

protected void Application_Start(Object sender, EventArgs e)

在这里面开线程

开线程的代码最好放在一个单例里,这样可以确保只开一个线程,

只要线程不出错,这个线程会一直继续下去啊,跟有没有人访问你的网站毫无关系的
------解决方案--------------------
没做过,可以试一下

如果没人访问,运行也没意思吧?
------解决方案--------------------

但是在后台开的这个线程,会在线程运行完成后自动关闭,就是如果他有事情做就会一直做,直到服务重启,
但是如果任务完成了,就会自动关闭线程了
------解决方案--------------------

被停掉的原因是你这个IIS重启了

所以重启以后需要有一个人访问下你的站点,才会执行protected void Application_Start(Object sender, EventArgs e) 

------解决方案--------------------
那是你网站设置的问题,在IIS中把应用程序池设置成一段时间无请求不自动关闭.
------解决方案--------------------
探讨
那是你网站设置的问题,在IIS中把应用程序池设置成一段时间无请求不自动关闭.

------解决方案--------------------
对 设置下IIS试试吧。
------解决方案--------------------
学习...up
------解决方案--------------------

lz的意思是不是用户开一个网页就打开一个线程,是不是这样啊

这样太恐怖了吧


------解决方案--------------------
路过 UP
------解决方案--------------------
貌似很耗性能滴。。。
------解决方案--------------------
如果线程运行过程中出错,可能会造成线程终止
你可以在while(true)里面加上try catch试试
------解决方案--------------------
探讨
唉,偏偏是租的虚拟空间,没得设。
看来只好把后台线程改为前台线程了。


------解决方案--------------------
IIS里面设置一下
------解决方案--------------------
没有人访问20分钟IIS回收应用程序池,线程就没了。