计时器-don';t直到上一个操作完成后再重新运行

本文关键字:操作 重新运行 上一个 -don 计时器 | 更新日期: 2023-09-27 18:24:55

我有一个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);

这是实现我追求的最好的方式吗?还是有更好的方式来阻止它同时执行?

计时器-don';t直到上一个操作完成后再重新运行

也许你可以使用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();

愿它有所帮助。