簡體   English   中英

Windows服務中具有不同計時器的不同線程

[英]different thread in with different timer in windows service

當前,我在服務中具有一些函數,這些函數在以4.0框架編寫的窗口服務中的計時器事件(每10分鍾)的不同線程中被調用,如下所示:

        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個計時器對象。

編輯: 其他人指出 ,他們在應用程序中使用了數百個單獨的計時器。 如果計時器的數量不是系統限制,那么我不知道將一個計時器用於多個時間間隔是否值得額外的復雜性。


創建一個每分鍾經過的計時器。 (時間間隔是任意的,但一分鍾可能更容易使用。)

經過時,請確定經過的總分鍾數。 你可以這樣做

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

然后,例如

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

然后計時器分別以10分鍾或3分鍾的間隔過去。

一個缺陷是,取決於計時器從運行到重新啟動之間需要花費多長時間,您可能會損失幾毫秒的時間,這很長一段時間內可能總計一分鍾,最終您可能會跳過一分鍾。 如果這是一個問題,那么您可以通過在經過的時間的秒部分接近整分鍾時將計時器間隔縮短幾秒鍾來解決。 (有點亂。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM