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

时间:2014-11-21 18:47:15

标签: c# asp.net-mvc

我正在尝试让一种方法在托管我的网络应用程序的服务器上每分钟运行一次。在Global.asax.cs Application_Start()中,我有以下代码:

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

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

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

1 个答案:

答案 0 :(得分:2)

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