首页 新闻 会员 周边 捐助

求大神,关于System.Threading.Timer被系统回收的解决方法

0
悬赏园豆:50 [待解决问题]

使用System.Threading.Timer定时执行一些操作,运行一段时间后(最长时间20多分钟),发现这个线程好像被系统自动回收了,试了网上的很多方法,比如全局变量,static变量等,都还是会被回收
请各位大神指点一下,谢谢了

清岚思辰的主页 清岚思辰 | 初学一级 | 园豆:104
提问于:2022-09-24 17:27

可以发个demo上来吗

会长 2年前
< >
分享
所有回答(3)
0

1、最长时间20多分钟 ,这种超时长的任务,会导致你如果定时周期小于20分钟,就出现多个线程同时执行的问题(当然,和你现在问的这个问题无关)。
2、线程不会被回收,应该是出现异常,导致其释放了。出现异常的情况,会有很多,一个是你代码的异常,另一个就是你引用了作用域外部的变量,并且这个变量没有其它地方引用,gc回收时将它回收了,导致你任务异常,然后出错。
我的建议是:
1、你的业务代码必须加try-catch处理异常。
2、不用Timer,直接起一个Thread,在里面写while(true){ Thread.Sleep(时间间隔);...你的业务 代码...;},当然,你的业务代码依然要处理异常,同时Thread.IsBackground=true,否则你会关不掉它。

ensleep | 园豆:1682 (小虾三级) | 2022-09-24 23:55
0
会长 | 园豆:12463 (专家六级) | 2022-09-26 11:01
0

如果是IIS的话,应该是IIS设置的回收时间导致的,可以设置IIS默认不回收。

a1010 | 园豆:301 (菜鸟二级) | 2022-09-28 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册