Остановка таймера в методе обратного вызова

У меня есть System.Threading.Timer, который вызывает свой соответствующий обработчик событий (обратный вызов) каждый10 мс, Сам методне реентерабельный и может иногда приниматьнамного дольше, чем 10 мс, Таким образом, я хочу остановить таймер во время выполнения метода.

Код:

private Timer _creatorTimer;

// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
      _creatorTimer = new Timer(CreatorLoop, null, 0, 10);

      // some other code that worker is doing while the timer is active
      // ...
      // ...
}

private void CreatorLoop(object state) {
      // Stop timer (prevent reentering)
      _creatorTimer.Change(Timeout.Infinite, 0);

      /*
          ... Work here
      */

      // Reenable timer
      _creatorTimer.Change(10, 0);
} 

MSDN утверждает, что метод обратного вызова вызывается (каждый раз, когда срабатывает таймер) в отдельном потоке от пула потоков. Это означает, что если я остановлю таймер первым делом в методе, он все равно не обязательно помешает таймеру сработать и запустить другой экземпляр метода до того, как первый из них сможет остановить таймер.

Может быть, таймер (или даже сам не реентерабельный метод) должен быть заблокирован? Как правильно предотвратить срабатывание таймера во время выполнения его метода обратного вызова (и не реентерабельного)?

Ответы на вопрос(5)

Ваш ответ на вопрос