线程在计时器上运行仅在启动应用程序时触发
问题描述:
我试图让托管我的Web应用程序的服务器每分钟运行一次。在Global.asax.cs
Application_Start()
,我有以下代码:线程在计时器上运行仅在启动应用程序时触发
var timer = new System.Threading.Timer(
e => DatMethod(),
null,
TimeSpan.Zero,
TimeSpan.FromMinutes(1)
);
目前我只是DatMethod
写有时间戳的文本文件。当我点击F5
并开始调试时,我可以看到它写入一次,但它再也不会运行。
这是放置代码的正确位置吗?如果是这样,我做错了什么?如果不是,我该如何正确设置它?
答
如果您使用10秒的时间间隔而不是一分钟,那么您可以看到您的代码将被执行多次,但您的代码不会永久继续执行,因为垃圾收集器将在一段时间后收集您的计时器实例,并在Timer类的终结器方法中停止其所有活动。 如果你为你的timer类使用静态变量,那么就不会有任何问题 但是等等,这种方法在ASP.NET线程机制中有几个问题。 相反,您必须使用类似http://www.quartz-scheduler.net/ 您可能也有兴趣http://msdn.microsoft.com/en-us/library/dn636893(v=vs.110).aspx 让我知道是否需要任何其他信息。
我认为这可以解决你的问题,你是正确的。 http://blog.*.com/2008/07/easy-background-tasks-in-aspnet/ – 2014-11-21 18:53:08
@NikolaMitev感谢您的参考,我现在会尝试。 – tnw 2014-11-21 18:59:39
@NikolaMitev这非常出色。谢了哥们。如果您想将该代码作为答案发布并提及作为参考,我很乐意接受它作为答案。 – tnw 2014-11-21 19:19:11