Usando o bloqueio com Threading.Timer

Eu tenho um aplicativo de serviço do Windows que usa umThreading.Timer e umTimerCallback para fazer algum processamento em intervalos específicos. Eu preciso bloquear esse código de processamento para apenas 1 thread por vez.

Por exemplo, o serviço é iniciado e o primeiro retorno de chamada é acionado e um encadeamento é iniciado e começa o processamento. Isso funciona bem, desde que o processamento seja concluído antes do próximo retorno de chamada. Então, por exemplo, o processamento está demorando um pouco mais do que o normal e o TimerCallback é acionado novamente enquanto outro thread está processando, eu preciso fazer esse thread esperar até que o outro thread esteja pronto.

Aqui está uma amostra do meu código:

static Timer timer;
static object locker = new object();

public void Start()
{
    var callback = new TimerCallback(DoSomething);
    timer = new Timer(callback, null, 0, 10000);
}

public void DoSomething()
{
      lock(locker)
      {
           // my processing code
      }
}

Esta é uma maneira segura de fazer isso? O que acontece se a fila ficar bastante substancial? Existe uma opção melhor?

questionAnswers(2)

yourAnswerToTheQuestion