2010-06-15 37 views
0

在我的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完成運行後上面的代碼開始?

回答

1

線程代碼執行完成後,線程將停止並且其資源被回收。

1

一旦你的工作完成,線程將被終止。

請注意,線程也可能會在您的工作完成之前終止我會IIS決定它需要回收ASP.NET工作線程。

+0

這也許可以解釋爲什麼它不總是在我們的尖銳環境中工作。有什麼辦法可以告訴IIS這個線程在完成之前不應該被殺死嗎? – 2010-06-16 06:40:22

+0

沒有。 IIS不知道ASP.NET進程中發生了什麼,只要進程沒有處理傳入的請求,或者沒有響應,IIS就認爲它是公平的遊戲,並且可以隨時回收它。儘管如此,我應該檢查.Net 4中是否有新的東西可以通過集成管道控制過程回收。 – 2010-06-16 07:15:17

+0

不幸的是,我沒有機會在這個項目上使用.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

相關問題