2015-08-23 56 views
0

在我的ASP.NET MVC應用程序中,我將運行後臺任務,有時會持續大約10分鐘。我已經閱讀了這個主題,看到應用程序域有時會重新啓動,從而刪除我的線程。Hangfire如何處理應用程序域重新啓動?

因此我查找了一些解決方案。我找到的主要解決方案是Hangfire。我知道它會在失敗等情況下重新啓動作業,但是他們是否「繞過」應用程序域以某種方式重新啓動,還是隻是在這種情況下重新啓動作業?

回答

5

我發現的主要解決方案是Hangfire。我知道它 重新啓動作業,當他們失敗等,但是他們「繞過」應用程序 域以某種方式重新啓動,或者它只是在這種情況下重新啓動作業?

不,他們不繞過應用程序域重新啓動 - 什麼都不能繞過它。從documentation引用:

遲髮型保持後臺作業,並且涉及 永久存儲內的處理的其它信息。持久性有助於 後臺作業在應用程序重新啓動,服務器重新啓動, 等中生存。這是使用CLR的線程池和Hangfire執行後臺作業 的主要區別。支持不同的存儲後端 。

因此,當你排隊一個新的任務時,首先要將它存儲在服務器上的某個永久性存儲器中,而不將其保存在內存中。通過這種方式,如果應用程序域名失效,稍後可以從該永久性存儲中讀取並恢復該任務。

+0

我明白了。那麼我是否正確地認爲,當應用程序域重新啓動時,這個工作將會再次運行(從一開始)? – JensOlsen112

+0

是的,當應用程序域再次啓動時,可能會在下一個請求進入時發生。或者,如果您將Hangfire用作單獨的Windows服務,那麼任務執行將不會被您的ASP.NET應用程序域重新啓動所中斷。 –

+0

好吧,我明白了。感謝您的澄清。我認爲我的問題沒有銀彈(如果在任何時候重新運行,我的工作都會失敗)。 – JensOlsen112

相關問題