2016-05-12 93 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分鐘,間隔過去。

一個缺點是,取決於計時器何時到達以及計時重新啓動的時間長短,您可能會丟失幾毫秒,這在很長一段時間內可能會累積多達一分鐘,最終可能會跳過一分鐘。如果這是一個問題,那麼你可以通過在計時間隔幾秒鐘內消除這個問題,當經過時間的秒部分蠕動接近一整分鐘。 (這有點凌亂。)

相關問題