J'ai un objet minuterie. Je veux qu'il soit exécuté toutes les minutes. Plus précisément, il doit exécuter une OnCallBack
méthode et devient inactif lorsqu'une OnCallBack
méthode est en cours d'exécution. Une fois qu'une OnCallBack
méthode se termine, elle (a OnCallBack
) redémarre une minuterie.
Voici ce que j'ai en ce moment:
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
}
Cependant, cela semble ne pas fonctionner. Il fonctionne très vite toutes les 3 secondes. Même si augmenter une période (1000 * 10). On dirait que ça ferme les yeux sur1000 * 10
Qu'ai-je fait de mal?
Timer.Change
: "Si dueTime vaut zéro (0), la méthode de rappel est appelée immédiatement.". On dirait que c'est nul pour moi.