/ / Таймер - не извършвайте повторно изпълнение, докато не завърши предишния - c #, таймер

Таймер - не извършвайте повторение, докато не завърши предишния - c #, таймер

имам Timer който изпълнявам на всеки 10 секунди, за да синхронизирам локалните данни в приложението си обратно на нашите сървъри.

public Timer syncTimer;
syncTimer = new Timer((o) =>
{
this.syncToServer();

}, null, 0, 10000);

Имам проблем, когато моята syncToServer отнемапо-дълго от 10 секунди, за да се изпълни, тя прескача над себе си. Имам предвид възможността да направите следното, за да направите пауза на таймера, докато той се изпълнява и след това го рестартирайте, след като завършите:

public Timer syncTimer;
syncTimer = new Timer((o) =>
{
syncTimer.Change(Timeout.Infinite , Timeout.Infinite); //Stop the timer
this.syncToServer();
syncTimer.Change(10000 , 10000); //Restart the timer
}, null, 0, 10000);

Това ли е най-добрият начин да постигнете това, което съм след или има ли по-добър начин да го спрете да изпълнява едновременно?

Отговори:

1 за отговор № 1

Може би можете да използвате System.Timers.Timer, това е по-лесно да се разбере от System.Threading.Timer.

var timer = new System.Timers.Timer(1000);
timer.AutoReset = false;
timer.Elapsed += (sender, e) => {
this.syncToServer();
// maybe Thread.Sleep(100000);
timer.Start();
};
timer.Start();

Нека помага.