我有一個從ServiceBase
派生的Windows服務類,它使用System.Timers.Timer
以頻繁的間隔運行代碼。 OnStop
和OnPause
的處理程序使用一些帶有定時器線程的信號來檢查定時器是否仍在運行並等待它結束。在Windows服務的停止/暫停請求期間處理延遲
在這種情況下,是否有推薦的方式來處理延遲錯誤,例如,如果處理程序正在等待計時器線程停止的無法接受的長時間?
我應該繼續等待,直到SCM放棄爲止(但這會使服務進入一種狀態,除了殺死進程之外,您無法對服務執行任何操作,有時重啓是重啓它的唯一方法)?或者我可能會拋出一個異常(這會使它處於類似的狀態,還是放棄停止/暫停請求)?
我更喜歡它,如果我可以拒絕暫停/停止請求並讓SCM將其保留在用戶可以嘗試暫停/再次停止的狀態。我可以中止計時器線程,但有時它會鎖定在其他資源上,我寧願等待直到完成,並且只有在管理員能夠稍後嘗試停止時記錄錯誤。
我剛剛這樣做,儘管它並沒有完全解決問題,因爲我可能會發現它需要更長和更長的時間,並且只是不斷碰撞時間。優選的解決方案是使其停止。只是嘗試拋出一個異常,它確實做到了這一點。彈出一個未知的錯誤給管理員,但服務仍處於運行狀態(這是準確的),並且管理員仍然可以嘗試稍後停止。不知道它是理想的,但。 – tjmoore 2010-01-27 16:11:57