Bir zamanlayıcı nesnem var. Her dakika çalışmasını istiyorum. Özellikle, bir OnCallBack
yöntem çalıştırmalı ve bir OnCallBack
yöntem çalışırken devre dışı kalmalıdır . Bir OnCallBack
yöntem bittiğinde, (a OnCallBack
) bir zamanlayıcıyı yeniden başlatır.
İşte şu anda sahip olduğum şey:
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
}
Ancak, çalışmıyor gibi görünüyor. Her 3 saniyede çok hızlı çalışır. Bir dönem artırsa bile (1000 * 10). Görmezden geliyor gibi görünüyor1000 * 10
Neyi yanlış yaptım?
Timer.Change
: "DueTime sıfır (0) ise, geri arama yöntemi hemen çağrılır.". Bana sıfır gibi görünüyor.