在C#中,当使用System.Timers.Timer
时,ElapsedEvent
是否可以在前一个没有完成的情况下运行?
想象一下,我有一个事件比我预期的要花更长的时间才能完成,并且在执行完成之前计时器的间隔时间到了。那么会发生什么?
根据我在 MSDN 上的阅读,System.Timers
在线程池上运行,而 Windows 定时器运行单线程。
我担心我会不小心同时举办两个(或更多!)事件。
最佳答案
是的,Elapsed 事件将再次触发。 仔细阅读 MSDN 文档,上面写着:
如果 SynchronizingObject 属性为 Nothing,则在 ThreadPool 线程上引发 Elapsed 事件。如果 Elapsed 事件的处理持续时间超过 Interval,则该事件可能会在另一个 ThreadPool 线程上再次引发。在这种情况下,事件处理程序应该是可重入的。
使用 Stop 方法也不能确保 Elapsed 事件的结束,因为 Stop 事件可能会在与 Interval 事件相关的不同线程中排队。
再次阅读MSDN阐明如何处理这种情况
关于c# - 来自同一个 System.Timers.Timer 的两个 ElapsedEvent 能否同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9462812/