2014-02-26 80 views
1

我正在使用quartz.net作爲Windows服務來安排我的工作。我的工作很長時間,我需要優雅地終止他們,如果石英服務停止(或者有人手動停止/重新啓動它或Windows關機/重新啓動;沒關係)。有什麼Quartz關機事件可以在我的作業中處理? Quartz還有一個啓動事件,我可以在我的數據庫中設置一些啓動值?我正在使用c#作爲我的工作。如何處理服務啓動和關閉事件?

回答

1

如果你得到這個代碼庫:

https://github.com/quartznet/quartznet/tree/master/server/Quartz.Server

工作的潤通已經完成。

您應該調試代碼。 但是ashga是正確的.... IScheduler.Shutdown(true)允許一個優雅的關閉。這意味着......它會嘗試完成任何已經運行的工作。

如果您使用控制面板來「停止服務」.........它可能會調用優雅的方法(我猜,我不知道肯定)..... ...所以如果在控制面板服務關閉(超時)發生之前曼妙停止結束....它將會很好。

如果「正常關機」花費的時間超過控制面板服務關閉(超時)....您將得到類似於「您的服務未及時關閉」的Windows消息。

........

如果您正在使用一個內存中的數據存儲(Quartz.Simpl.RAMJobStore)...有沒有什麼你可以在服務重新做。

如果您使用的是ADO網絡數據存儲(「Quartz.Impl.AdoJobStore.JobStoreTX」)...那麼有一些「從我離開的地方拿起」東西.......這是一個需要深入研究的問題。 「失火」將是其中一個條款。

如果您不正常地停止使用內存數據存儲(Quartz.Simpl.RAMJobStore).....它基本上與您在計算機上關閉電源一樣.......當它再次啓動時,它不會知道任何「狀態」。

0

當您的應用程序關閉時,您是否嘗試過調用IScheduler.Shutdown(true)? 應該允許一個正常關機:)

+0

石英作爲服務運行,我無法控制何時關閉。它像循環一樣,如果我不知道Quartz正在關閉,我怎麼知道什麼時候調用IScheduler.Shutdown(true)? – taimur

相關問題