2016-05-12 70 views
0

目前,我在我的服务功能,这是在写在4.0框架,这样的窗口服务叫在不同的线程上的定时器事件(每10分钟):不同的线程在与Windows服务不同的定时器

 public void OnTimer(object sender, System.Timers.ElapsedEventArgs args) 
     { 
       Task.Factory.StartNew(() => ABC()); 
       Task.Factory.StartNew(() => DEF()); 
       Task.Factory.StartNew(() => GHI()); 
       Task.Factory.StartNew(() => IJK()); 
       Task.Factory.StartNew(() => LMN()); 
     } 

我想为每个线程有不同的时间间隔/计时器事件。一种可能的解决方案是创建新的计时器对象并在不同的计时器事件中调用每个函数有其他优化的方式吗? 未来,如果服务包含50个功能,那么我将不得不创建50个计时器对象。

回答

1

编辑:Others have pointed out他们已经在应用程序中使用了数百个单独的定时器。如果定时器的数量不是系统限制,那么我不知道在多个时间间隔内重复使用一个定时器是否值得额外复杂。


创建一个每分钟过去一次的计时器。 (间隔是任意的,但是一分钟可能更容易处理。)

当它过去时,确定已过去的总分钟数。你可以做到这一点与

var elapsedMinutes = (DateTime.Now - _startTime).TotalMinutes 
// where _startTime is when the timer started 

然后,例如,如果

(_elapsedMinutes % 10) == true 
(_elapsedMinutes % 3) == true 

然后,定时器已在分别为10分钟或3分钟,间隔过去。

一个缺点是,取决于计时器何时到达以及计时重新启动的时间长短,您可能会丢失几毫秒,这在很长一段时间内可能会累积多达一分钟,最终可能会跳过一分钟。如果这是一个问题,那么你可以通过在计时间隔几秒钟内消除这个问题,当经过时间的秒部分蠕动接近一整分钟。 (这有点凌乱。)

相关问题