2014-10-21 99 views
0

我有一個ASP.NET應用程序,我需要在新線程上輪詢Amazon隊列服務。我知道,如果我產生了一個新的線程,ASP.NET並沒有意識到它,並且如果它由於某種原因認爲應用程序池需要被回收,可能會突然終止,例如更改web.config。asp.net線程與IRegisteredObject隊列輪詢

我通過在IIS中手動回收應用程序池來測試此問題,但問題是線程沒有回來並在回收之後開始輪詢。這是否意味着在生產線程將停止輪詢時,IIS的感覺呢?

也許我應該知道的其他情況?

所以問題是Thread這種類型的處理不安全。或者我應該使用IRegisteredObject,在這種情況下,我應該在0123.中調用RegisterObject()/UnregisterObject() in global.asax或AppDomain.CurrentDomain.DomainUnload

回答

1

Web服務器不適用於長時間運行或計劃任務。正如你所提到的那樣,服務器可以選擇在感覺喜歡時自行關閉,並且它不會恢復之前未完成的工作,它只會中止它。你可以做的最好的做法是使用一些預定的訪問程序,每隔一分鐘訪問一次你的網站,以保持它的活着,希望服務器不會殺死線程。然後在開始請求事件中檢查線程是否活着,如果沒有重新啓動它。但我會強烈建議使用Windows服務來做你想做的事情,而不是在網絡服務器上做。