2016-10-17 72 views
2

我知道,當應用程序池被回收或停止時,或者當進程退出時,我已啓動的任何線程將被強制終止。我也知道IIS不是專門用於長時間運行的任務。當應用程序池仍在運行時,是否會終止長時間運行的線程

考慮鑑於進程和應用程序池是不以任何方式關閉在Global.asax中

protected void Application_Start(object sender, EventArgs e) 
{ 
    _worker = new Thread(Run); 
    _worker.IsBackground = true; 
    _worker.Start(); 
} 

private void Run() 
{ 
    while(true) 
    { 
     Thread.Sleep(50000); 

     WorkWork.BeHappyTo(); 
    } 
} 

以下,有在IIS中的任何其他機構,可以終止我_worker線程,但仍繼續爲新的請求提供服務,好像什麼都沒有發生?

我正在尋找任何監控與請求,CPU時間,時鐘等無關的線程的機制,並根據一些啓發式設置終止它們。

回答

2

不,您的線程只要應用程序域存在就安全。終止你的應用程序的隨機部分不會是一個Web框架的好設計。事實上,沒有.NET API來枚舉所有線程(感謝上帝)。

但是,您需要處理錯誤,因爲錯誤會終止線程。通常,記錄它們並繼續是正確的方法。應該查看日誌。

我發現它是一種更安全,更簡單的模式,可以在應用程序之外進行基於時間的調度。每5秒呼叫一個cron調用一個祕密URL。

相關問題