2013-07-18 44 views
0

我有一個在預定時間發送電子郵件的應用程序。 有時,發送電子郵件時,應用程序卡住了,我仍然不知道爲什麼。爲關鍵任務實施看門狗

我想過實現一個像這樣的簡單看門狗: 在應用程序開始發送電子郵件之前,它會初始化一個新的看門狗實例。 此實例啓動一次性計時器。 如果任務完成 - 我們讓看門狗知道它應該停下來,並取消它的計時器。 如果定時器已經過期 - 我們強行退出程序。

我不確定這是一個有效的解決方案還是更像是一個黑客,並會欣賞關於 此主題的任何輸入。

謝謝,奧默

+0

你可能想弄清楚爲什麼它首先被卡住了。然後,您可以考慮有效的應對措施,其中可能包括監督任務或其他措施。 – JimmyB

+0

這是一個黑客。但是當最後期限即將到來時,你可以避開它。在實施這種黑客攻擊後,重點關注爲什麼「應用程序卡住」背後的原因。 –

+0

這個bug通常發生在一些「開心」的客戶系統上,不會重現等... –

回答

1

這是不是一個這麼糟糕的主意恕我直言。

我在這裏看到的主要缺陷不是技術性的,而是一種人性化的問題:一旦監督人員運作正常,而且客戶不再抱怨,那麼說「問題太容易了」解決了!」並忘記最初的問題(把它扔到積壓的地方,最好標記爲「解決」)。

在技術方面:

你可能要考慮看​​門狗和應用程序,以及如何暴力看門狗的作用是隔離級別。最小的隔離是讓看門狗在不同的線程上運行(一次性定時器會這樣做)。將電子郵件機制和監視程序運行在不同的AppDomain上可能會更好,因此監視程序在超時時卸載整個「電子郵件AppDomain」。這給你一個類似的解決方案來殺死進程(至少在一個「管理」的觀點下),但不如殺死進程並重新啓動它。

您還應該考慮比賽條件:看門狗定時器和電子郵件發送過程正在比賽中,這可能最終在成功發送電子郵件後終止進程,這可能會導致再次發送相同的電子郵件因爲您重新啓動應用程序(導致客戶體驗不佳)。

正如評論者所說,我強烈建議您調試問題。您需要使用生產調試工具和工具,如跟蹤,日誌記錄,生產時調試程序(如WinDbg)等,以便您診斷和調試不可再現的問題。