使用System.Threading.Timer定时执行一些操作,运行一段时间后(最长时间20多分钟),发现这个线程好像被系统自动回收了,试了网上的很多方法,比如全局变量,static变量等,都还是会被回收
请各位大神指点一下,谢谢了
1、最长时间20多分钟 ,这种超时长的任务,会导致你如果定时周期小于20分钟,就出现多个线程同时执行的问题(当然,和你现在问的这个问题无关)。
2、线程不会被回收,应该是出现异常,导致其释放了。出现异常的情况,会有很多,一个是你代码的异常,另一个就是你引用了作用域外部的变量,并且这个变量没有其它地方引用,gc回收时将它回收了,导致你任务异常,然后出错。
我的建议是:
1、你的业务代码必须加try-catch处理异常。
2、不用Timer,直接起一个Thread,在里面写while(true){ Thread.Sleep(时间间隔);...你的业务 代码...;},当然,你的业务代码依然要处理异常,同时Thread.IsBackground=true,否则你会关不掉它。
如果是IIS的话,应该是IIS设置的回收时间导致的,可以设置IIS默认不回收。
可以发个demo上来吗
– 会长 2年前