2011-10-03 115 views
2

背景如下:應該在給定時間每天執行一次操作的Windows服務。事件與while(true)循環的比較

我目前通過創建一個計時器並添加了ElapsedEventHandler來實現此目的。事件每隔幾分鐘觸發一次,然後檢查我們是否通過了配置的時間。如果是這樣的話,那麼這個行爲就會被執行,如果沒有的話。

一位同事問我,如果只有一個包含sleep()的while(true)循環並不容易,那麼當然還有相同的邏輯來檢查我們是否已經過了行動時間。

問題: 可以說一個事件與一段時間(循環)的「健壯性」有什麼關係嗎?我正在考慮線程「死亡」以便while(true)循環退出的情況。這種情況在另一種情況下會更「可能」發生嗎?

+0

該服務是否在執行其他任何操作,或者僅僅是每天運行一次?在任何情況下,隨時也可以看看我的問題:http://stackoverflow.com/questions/481760/ –

+0

它沒有執行該操作時處於空閒狀態,因此閒置大部分時間。按照selbie的規定,我將檢查Task Scheduler。謝謝。 –

回答

8

我不贊成投票。

如果你的服務只是週期性地閒置一整天,並定期醒來(和分頁代碼)以查看「是時候運行」,那麼這是一個更適合Windows Task Scheduler的任務。您可以以編程方式安裝任務,以便每天通過任務計劃程序運行。然後,你的代碼不需要運行,除非有時間運行。 (或者,如果您的服務確實需要在後臺運行,則調度程序中的任務可以指示您的服務喚醒而不是定時器邏輯)。

+0

謝謝你的回答。我會看看任務計劃程序。 –

0

如果您使用適當的錯誤處理,兩者都將同樣健壯。
如果你不使用正確的錯誤處理,它們將同樣脆弱。

while(true) 
{ 
    ... 
    Thread.Sleep(1000); 
} 

在響應像OnStop這樣的標準服務事件時,會使您的服務變慢。

此外,你把你的while循環?在一個單獨的線程?如果您也使用循環,您將獲得更多手動管理。

總結:使用計時器。