System.Timers.Timer逐渐增加间隔?

我一直面临一个非常独特的问题。 我正在使用每分钟触发一个方法的System.Timers.Timer。 渐渐地,我开始知道时间间隔不是恒定的。

为了测试和确保问题,我只需运行一个定时器,它每分钟都会运行一个函数。 并且输出令人震惊,定时器间隔秒数不是恒定的。 他们正在改变,因此造成了一个问题。

12/13/2016 3:39:26 PM
12/13/2016 3:40:25 PM
12/13/2016 3:41:25 PM
12/13/2016 3:42:25 PM
12/13/2016 3:43:25 PM
12/13/2016 3:44:26 PM
12/13/2016 3:45:26 PM
12/13/2016 3:46:26 PM
12/13/2016 3:47:26 PM
12/13/2016 3:48:26 PM
12/13/2016 3:49:26 PM
12/13/2016 3:50:26 PM
12/13/2016 3:51:26 PM

正如人们可以注意到这个区间正在逐渐增加。 当天花费时,问题就会发生。 因此,这样的问题正在创造,就像我必须在一分钟内处理并且日期发生变化。

代码很简单

System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 60000;
timer.Elapsed += timer_Elapsed;
timer.Start();

System.Timers.Timer没有那么精确。 在这里查看备注部分。


我设法解决了这个问题。 解决方案很简单

在全球范围内设置两项检查;

static bool _IsDirty = false, _TimerChecked = true;

然后处理ElapsedEventHandler内部的逻辑,让DataSynchronizer成为委托方法,然后实现可以作为

private Task AdwordsPullDataSynchronizer(System.Timers.Timer timer)
{

     if (!_TimerChecked)
     {
          _IsDirty = false;
          timer.Stop();
          var interval = Convert.ToDouble(Math.Abs(DateTime.Now.Second - 60));
          timer.Interval = (interval + 2) * 1000;
          timer.Start();
          _TimerChecked = true;
     }

     if (DateTime.Now.Second > 10)
     {
         _IsDirty = true;
         _TimerChecked = false;
     }


     //Place your interval logic here

     if (_IsDirty)
     {
        timer.Stop();
        var interval = Convert.ToDouble(Math.Abs(DateTime.Now.Second - 60));
        timer.Interval = (interval + 2) * 1000;
        timer.Start();
     }

     return Task.FromResult(0);
}

我已经实现了非常明确的保存方逻辑。

代码正在做什么? 它将检查间隔秒数是否大于10,然后它将reset the timer并将间隔设置为下一个ElapsedEvent 2nd second 。 然后它会重置并将fixed the interval为每秒ElapsedEvent 2nd second

链接地址: http://www.djcxy.com/p/63021.html

上一篇: System.Timers.Timer gradually increasing interval?

下一篇: One Timer vs Three Timers Performance