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

本文关键字:一次 启动 计时器 运行 线程 应用 | 更新日期: 2023-09-27 18:31:21

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

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

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

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

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

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