【发布时间】:2013-07-25 15:36:08
【问题描述】:
参考MSDN 关于 System.Timers.Timer 的这句话:
Timer.Elapsed 事件在 ThreadPool 线程,所以 事件处理方法可能在一个上运行 线程同时调用 Timer.Stop 方法在另一个上运行 线。这可能会导致 在 调用停止方法。这场比赛 条件不能简单地预防 通过比较 SignalTime 属性 随着 Stop 方法的时间 调用,因为事件处理 方法可能已经在执行 调用 Stop 方法,或者可能 瞬间开始执行 当调用 Stop 方法并且 保存停止时间的时刻。如果 防止线程是至关重要的 调用 Stop 方法 在事件处理过程中进行 方法仍在执行,使用更多 强大的同步机制,例如 作为 Monitor 类或 比较交换方法。使用的代码 CompareExchange 方法可以是 在示例中找到 Timer.Stop 方法。
谁能举一个“强大的同步机制,例如 Monitor 类”的例子来解释这究竟意味着什么?
我认为这意味着以某种方式使用锁,但我不确定您将如何实现它。
【问题讨论】:
标签: c# .net synchronization timer