我有一个带有 n(当前 n = 2)个实例的 Azure Worker Role。这些实例中的每一个在其主线程上都有一个 System.Timers.Timer,每 20 秒执行一次,产生一些工作进程。当角色实例最初启动时,它们通过内部端点同步自己,以便计时器同时启动(这有效)。
在甚至一天的过程中,这两个具有相同间隔的计时器往往会徘徊 - 一个最终会比过去早几秒钟开始,另一个可能会朝着相同的方向,或者更糟糕的是,另一个。
我的运行方法基本上如下:
public override void Run()
{
while (true)
{
GC.KeepAlive(this.LogTimer); // make sure garbage collection never touches the timer
}
}
问题:
- 这可能是什么原因造成的?
- 向 while(true){} 循环添加 Thread.Sleep(sleeptimeinMS) 调用是否会通过防止主线程一直处于忙碌状态来改善这一点(以允许计时器线程以某种方式更自由地履行其职责?)?
- 我应该尝试定期将角色重新同步到某个外部时钟是正确的答案吗?
- 有什么完全不同的方法来实现这个吗?
在此先感谢您的时间,
亚历克斯