在我的ASP.NET應用程序中,邊倒棧我把下面的代碼:該方法結束後,該線程會發生什麼?
Public Shared Sub Larma(ByVal personId As Integer)
Dim thread As New System.Threading.Thread(New ParametrizedThreadStart(AddressOf Larma_Thread))
thread.Start(personId)
End Sub
Private Shared Sub Larma_Thread(ByVal personId As Integer)
StartaLarm(personId)
Thread.Sleep(1000 * 30)
StoppaLarm(personId)
End Sub
雖然這個線程運行時,該請求的其餘部分被處理和響應被髮送到客戶端。但是,由於我從來不打電話thread.Abort()
或類似的東西,而且我對ASP.NET中的線程很不熟悉,所以我很擔心我打開內存泄漏或其他線程問題。
線程會發生什麼與我Larma_Thread
完成運行後上面的代碼開始?
這也許可以解釋爲什麼它不總是在我們的尖銳環境中工作。有什麼辦法可以告訴IIS這個線程在完成之前不應該被殺死嗎? – 2010-06-16 06:40:22
沒有。 IIS不知道ASP.NET進程中發生了什麼,只要進程沒有處理傳入的請求,或者沒有響應,IIS就認爲它是公平的遊戲,並且可以隨時回收它。儘管如此,我應該檢查.Net 4中是否有新的東西可以通過集成管道控制過程回收。 – 2010-06-16 07:15:17
不幸的是,我沒有機會在這個項目上使用.NET 4(至少現在還沒有),所以我需要在.NET 2.0(可能是3.5)中找到解決這個問題的方法。看到這個問題的後續行動:http://stackoverflow.com/questions/3052200/why-does-this-threading-approach-not-work – 2010-06-16 10:08:18