Używanie blokady z Threading.Timer

Mam aplikację usługi Windows, która używaThreading.Timer i aTimerCallback wykonać pewne przetwarzanie w określonych odstępach czasu. Muszę zablokować ten kod przetwarzania tylko na 1 wątku naraz.

Na przykład usługa jest uruchamiana i uruchamiane jest pierwsze wywołanie zwrotne, a wątek jest uruchamiany i rozpoczyna przetwarzanie. Działa to poprawnie, dopóki przetwarzanie zostanie zakończone przed następnym wywołaniem zwrotnym. Powiedzmy na przykład, że przetwarzanie trwa trochę dłużej niż zwykle, a funkcja TimerCallback jest uruchamiana ponownie, podczas gdy inny wątek przetwarza, muszę sprawić, aby wątek czekał, aż drugi wątek zostanie wykonany.

Oto przykład mojego kodu:

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
      }
}

Czy to bezpieczny sposób na zrobienie tego? Co się stanie, jeśli kolejka stanie się dość duża? Czy jest lepsza opcja?

questionAnswers(2)

yourAnswerToTheQuestion