线程在计时器上运行仅在启动应用程序时触发

问题描述:

我试图让托管我的Web应用程序的服务器每分钟运行一次。在Global.asax.csApplication_Start(),我有以下代码:线程在计时器上运行仅在启动应用程序时触发

var timer = new System.Threading.Timer(
    e => DatMethod(), 
    null, 
    TimeSpan.Zero, 
    TimeSpan.FromMinutes(1) 
); 

目前我只是DatMethod写有时间戳的文本文件。当我点击F5并开始调试时,我可以看到它写入一次,但它再也不会运行。

这是放置代码的正确位置吗?如果是这样,我做错了什么?如果不是,我该如何正确设置它?

+1

我认为这可以解决你的问题,你是正确的。 http://blog.*.com/2008/07/easy-background-tasks-in-aspnet/ – 2014-11-21 18:53:08

+1

@NikolaMitev感谢您的参考,我现在会尝试。 – tnw 2014-11-21 18:59:39

+0

@NikolaMitev这非常出色。谢了哥们。如果您想将该代码作为答案发布并提及作为参考,我很乐意接受它作为答案。 – tnw 2014-11-21 19:19:11

如果您使用10秒的时间间隔而不是一分钟,那么您可以看到您的代码将被执行多次,但您的代码不会永久继续执行,因为垃圾收集器将在一段时间后收集您的计时器实例,并在Timer类的终结器方法中停止其所有活动。 如果你为你的timer类使用静态变量,那么就不会有任何问题 但是等等,这种方法在ASP.NET线程机制中有几个问题。 相反,您必须使用类似http://www.quartz-scheduler.net/ 您可能也有兴趣http://msdn.microsoft.com/en-us/library/dn636893(v=vs.110).aspx 让我知道是否需要任何其他信息。