У меня есть рабочая роль Azure с n (в настоящее время n = 2) экземплярами. Каждый из этих экземпляров имеет System.Timers.Timer в своем основном потоке, который выполняется каждые 20 секунд, порождая некоторые рабочие процессы. Когда экземпляры роли загружаются изначально, они синхронизируются через внутренние конечные точки, так что таймеры запускаются одновременно (это работает).
В течение даже дня эти два таймера с одинаковым интервалом имеют тенденцию блуждать - один из них запустится на несколько секунд раньше, чем раньше, а другой может идти в том же направлении или, что еще хуже, другой.
Мой метод запуска в основном следующий:
public override void Run()
{
while (true)
{
GC.KeepAlive(this.LogTimer); // make sure garbage collection never touches the timer
}
}
Вопросы:
- Что может быть причиной этого?
- Улучшило бы добавление вызова Thread.Sleep (sleeptimeinMS) в цикл while (true) {}
это предотвращает постоянную занятость основного потока (для
позволить потоку таймера как-то более свободно выполнять свой долг?)?
- Правильный ли ответ, что я должен попытаться повторно синхронизировать роли с некоторыми
внешние часы периодически?
- Есть ли принципиально разные способы реализации этого?
Заранее спасибо за ваше время,
Alex