Eu tenho um objeto temporizador. Eu quero que seja executado a cada minuto. Especificamente, ele deve executar um OnCallBackmétodo e ficar inativo enquanto um OnCallBackmétodo está sendo executado. Quando um OnCallBackmétodo termina, ele (a OnCallBack) reinicia um cronômetro.
Aqui está o que tenho agora:
private static Timer timer;
private static void Main()
{
timer = new Timer(_ => OnCallBack(), null, 0, 1000 * 10); //every 10 seconds
Console.ReadLine();
}
private static void OnCallBack()
{
timer.Change(Timeout.Infinite, Timeout.Infinite); //stops the timer
Thread.Sleep(3000); //doing some long operation
timer.Change(0, 1000 * 10); //restarts the timer
}
No entanto, parece não estar funcionando. Corre muito rápido a cada 3 segundos. Mesmo quando se levanta um período (1000 * 10). Parece que fecha os olhos para1000 * 10
O que eu fiz errado?
Timer.Change: "Se dueTime for zero (0), o método de retorno de chamada é invocado imediatamente.". Parece que é zero para mim.