0
我有一個Azure工作者角色,n(當前n = 2)個實例。每個這樣的實例在其主線程上都有一個每隔20秒執行一次的System.Timers.Timer,產生一些工作進程。當角色實例初始啓動時,它們通過內部端點同步自己,以便定時器在同一時間啓動(這有效)。在Azure Worker角色中漫遊的System.Timers.Timer
即使在一天的時間裏,這兩個間隔相同的定時器往往會徘徊 - 最終會在幾秒鐘前開始,而另一個可能會走向相同的方向,或者更糟的是,另一個可能會走向相同的方向。
我的run方法基本上是以下幾點:
public override void Run()
{
while (true)
{
GC.KeepAlive(this.LogTimer); // make sure garbage collection never touches the timer
}
}
問題:
- 什麼導致此?
- 將while(true){}循環加入Thread.Sleep(sleeptimeinMS)調用通過防止主線程始終忙碌(至 允許定時器線程以某種方式更容易執行)來改進 它的職責?)?
- 是否應該嘗試將週期性角色重新同步到某個外部時鐘的正確答案?
- 任何完全不同的方法來實現這個?
預先感謝您的時間,
亞歷
是的,我讀過System.Timers.Timer的準確性限制,我沒有(我)看到的行爲感到驚訝,但我的應用程序不需要100%的準確性,只是保持20-第二次在5秒鐘之內彼此(我應該在我原來的帖子中說過)。鑑於這些期望,你能提出任何策略嗎? – user483679
每次打勾後嘗試與時鐘同步。一個嘀嗒聲應該足夠準確,以便在5秒內舒適地擊中。 – driis
好吧......你可能是對的,我只需要壓低並編寫一些管理定時器線程的代碼,以避免不必要的延時事件。謝謝。如果(何時)有效,我會測試並給你信用。 – user483679