我在 Windows 服务中使用 system.timer 来运行通常超过计时器间隔的进程。我试图阻止计时器多次触发相同的代码,这是 system.timers 的一个已知问题。
我想要什么:计时器运行我的代码,但计时器“暂停”以等待代码完成,然后再恢复滴答声。
我有两个问题:
system.timers 的工作方式是计时器将通过启动相同代码的新冗余线程来为您创建竞争条件,如果在计时器的时间间隔过去时尚未完成,则将它们堆积在您身上。
我会启动/停止计时器以防止这种情况发生,但是使用 System.Timers.Timer,一旦您停止计时器以完成处理,它就永远不会回来 - 我永远无法重新启动计时器已停止,它已被销毁并可能被收集。启用/禁用与启动/停止完全相同,结果相同。
如果在定时器的时间间隔过去时进程还没有完成,你到底如何让 system.timer 不启动相同代码的新冗余线程?显然,启动/停止(启用/禁用)计时器不是解决方案,因为它不起作用。
帮助!