考虑这段代码......
using System.Threading;
//...
Timer someWork = new Timer(
delegate(object state) {
//Do some work here...
},
null, 0, 60000);
HttpContext.Current.Application["SomeWorkItem"] = someWork;
这可能有危险吗?在应用程序中缓存计时器以在站点运行时在后台执行某些工作似乎是安全的,但我想知道是否有人对此有一些经验。
发布于 2018-08-20 19:29:35
这通常是一个坏主意,因为System.Threading.Timer使用ThreadPool中的线程,与ASP.Net相同。
如果由于任何原因你的计时器委托阻止或停止,计时器将在超时期限之后开始一个新的线程,这将进入可用于ASP.net的线程。
如果他们都开始阻止,实际上你将无法再提供任何网络请求(可能是一件坏事)
发布于 2018-08-20 20:51:01
这样做的问题是你不能保证这个过程仍然存在。IIS基本上会在进程想要的时候收回它,因此会冒没有执行它的风险。
如果你需要完成这项工作,那么你需要将其编码到一个Web调用中,或者让一个服务在服务器的后台运行。
https://stackoverflow.com/questions/-100000622
复制相似问题