如果我瀏覽到頁面加載中具有以下內容的asp.net網頁,關閉瀏覽器後線程將繼續運行多長時間?我會認爲它會自己完成,但我不確定它會在會話結束時終止,或者類似的事情。在網頁中運行的線程
protected void Page_Load(object sender, EventArgs e) {
Thread T = new Thread(new ThreadStart(longRunningMethod));
T.Start();
}
謝謝。
如果我瀏覽到頁面加載中具有以下內容的asp.net網頁,關閉瀏覽器後線程將繼續運行多長時間?我會認爲它會自己完成,但我不確定它會在會話結束時終止,或者類似的事情。在網頁中運行的線程
protected void Page_Load(object sender, EventArgs e) {
Thread T = new Thread(new ThreadStart(longRunningMethod));
T.Start();
}
謝謝。
當線程中的代碼停止時,即當longRunningMethod()
終止時,線程將停止。
這就是爲什麼在應用程序服務器中開始自己啓動線程是一個危險的想法,至少在不管理它們的生命週期的情況下(即提供線程在一定時間後關閉的邏輯,確保釋放資源,提供一次可以運行多少「工作線程」的上限等)。
如果每次訪問特定網頁導致在服務器上啓動一個單獨的線程,並且線程可能永遠運行,那麼最終足夠的這些訪問將使應用程序服務器癱瘓。
可以使用較短的任務。我有一個報告系統,可以在用戶快速獲取報告的第一部分時分別生成統計數據,以便在客戶到達這些數據時就可以做好準備。對於長時間運行的進程(在我的情況下超過30秒),您將需要利用某種服務並將您的任務添加到隊列中。
您還需要考慮如果應用程序池回收它將終止您的線程,以便提供額外的動機將這些線程移到其他地方。
最後,您將希望通過某種方式表明您的流程已完成。考慮如何知道線程何時完成,以便如果再次嘗試請求,則不會生成可能已在處理的同一組數據。
當然。這是一個過於簡單的例子,只是爲了獲得一個概念。感謝您的答覆。 – 2010-10-06 13:57:32