考虑这段代码...
using System.Threading;
//...
Timer someWork = new Timer(
delegate(object state) {
//Do some work here...
},
null, 0, 60000);
HttpContext.Current.Application["SomeWorkItem"] = someWork;
这会很危险吗?在应用程序中缓存一个计时器以在您的网站运行时在后台执行一些工作似乎是安全的,但我想知道是否有人对此有一些经验。
我确信编写一个在后台运行的服务肯定会好得多,但有时这并不总是一种选择。这是替代方案吗?
最佳答案
这通常是个坏主意,因为 System.Threading.Timer 使用来自 ThreadPool 的线程,与 ASP.Net 相同。
如果由于任何原因您的计时器委托(delegate)阻塞或停止,计时器将在超时期限后开始一个新线程,这会占用 ASP.net 可用的线程。
如果它们都开始阻塞,实际上您将无法再提供任何 Web 请求(可能是一件坏事)
关于ASP.NET 和计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/117318/