每天早上计时器.定时器延迟2-5秒



我有一个System.Timers.Timer,用于调度一些任务的运行。我有两个BlockingCollection队列正在等待定时器触发并将一些任务放入队列:

private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
{
   Logger.WriteTrace("Timer elapsed", "Timer elapsed after waiting: "+ DateTime.Now);
   lock (globalLock)
   {
      if (!_stop)
      {
         Logger.WriteTrace("Timer elapsed", "Iterating through schedules");
         DateTime now = DateTime.Now;
         foreach (T schedule in schedules)
         {
            DateTime occurence = schedule.GetNextOccurrence(now);
            if ((occurence - now).TotalMilliseconds < DefaultDelay)
            {
               Logger.WriteTrace("Run times", "Task added to the queue");
               priorityDictionary[schedule.IsParallel].Add(schedule);
            }
         }
         double nextWake = CalcualteNextWake(DateTime.Now.AddMilliseconds(DefaultDelay));
         SetInterval(nextWake);
      }
   }
}

SetInterval方法中有

if (interval > 0)
{
   _timer.Interval = interval;
   // starting timer, cause by design it is not Autoreset
   Logger.WriteTrace("Setting next wake after: ",
      interval.ToString() + " at " + DateTime.Now.AddMilliseconds(interval));
   _timer.Start();
}
else
{
   Logger.Error("Wrong interval");
}

所以我注意到计时器的奇怪行为,每天最后一个日志消息写的是这样的:

12:37:59##Trace####Setting next wake after: ##78839662.0084 at 5/27/2014 10:31:58 AM##

每隔一天第一个消息说:

10:32:03##Trace####Timer elapsed##Timer elapsed after waiting: 5/27/2014 10:32:03 AM##

计时器的每一次运行都很好,准确,并且在"设置下一个唤醒"消息中运行的时间完全相同,因此计时器只在每天第一次运行时延迟,并且总是在2-5秒之间。我找不到任何可能在代码中出现问题的东西,似乎它工作得很好,而且我在白天计时器的流逝中没有任何问题。有人知道是什么导致了这个问题吗?

谢谢。

在代码中使用DateTime。现在在Logger.WriteTrace.

为什么不创建一个变量并像

那样使用它呢?
DateTime now = DateTime.Now;
Logger.WriteTrace("Timer elapsed", "Timer elapsed after waiting: "+ now);

还有SetInterval方法

Logger.WriteTrace("Setting next wake after: ",
      interval.ToString() + " at " + now.AddMilliseconds(interval));

最新更新