Eu tenho um objeto temporizador. Eu quero que seja executado a cada minuto. Especificamente, ele deve executar um OnCallBack
método e ficar inativo enquanto um OnCallBack
método está sendo executado. Quando um OnCallBack
mé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.