2011-09-21 61 views
1

我想在我的服務中使用計時器。但我聽說定時器導致死鎖問題。 假設如果我將計時器設置爲每10分鐘啓動一次。 我的服務需要5分鐘才能完成當前的執行。 但在某些情況下,需要更多時間(不可預知)。 那麼如果我的服務在10分鐘內無法完成當前的執行 ,會發生什麼情況。 我當前執行的服務會發生什麼? 感謝您的幫助。Windows服務中的計時器

回答

2

您可以在Windows服務中使用定時器,因爲它也對MSDN

表示服務應用程序的設計是長時間運行。因此,它通常會輪詢或監視系統中的某些內容。監控在OnStart方法中設置。但是,OnStart實際上並沒有進行監控。一旦服務操作開始,OnStart方法必須返回到操作系統。它不能永遠循環或阻止。要設置簡單的輪詢機制,您可以使用System.Timers.Timer組件。在OnStart方法中,您將在組件上設置參數,然後將Enabled屬性設置爲true。定時器會定期在您的代碼中引發事件,屆時您的服務可以進行監控。

儘管存在上述情況,您仍然需要創建邏輯以避免死鎖或在Elapsed事件中指定的代碼需要比間隔本身更長的時間。

Elapsed事件在ThreadPool線程上引發。如果處理Elapsed事件的持續時間比Interval長,則可能會在另一個ThreadPool線程上再次引發該事件。因此,事件處理程序應該是可重入的。

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.80%29.aspx