我在MSDN上讀到前景線程和後臺線程之間的區別在於,應用程序無法終止,直到它的所有前臺線程終止爲止,不要等待後臺線程。我決定嘗試一下,以便更好地理解線程。當我重新啓動AppDomain時,前臺線程沒有阻止應用程序
Thread t = new Thread(Work); //Work() just has the thread sleep for a long time
t.IsBackground = false; //make it a foreground thread
t.Start();
while(true)
{
if(Session["checker"] != null)
{
Session["checker"] = true;
System.Diagnostics.Debug.Write("I'm here!");
}
}
我使用了一個會話變量來知道AppDomain是否已重新啓動,因爲在AppDomain重新啓動時會話被清除。
因此,當我保存web.config文件時,它應該觸發AppDomain重新啓動,這應該要求它等待我的長時間運行的線程t
,因爲t
正在前臺運行。但是當我觸摸web.config文件時,直接進入清除我的Session["checker"]
並打印出「我在這裏!」,所以我知道我的應用程序沒有等待我的線程。
我誤解了前臺線程應該如何工作?不應該重新啓動AppDomain等待我的線程完成執行,然後開始清除會話變量?
感謝
當它回收應用程序池時,ASP.NET將終止所有線程。不確定ASP.NET是否在背景和前景線程之間有明確的區別(儘管你可能發明了一個,具有足夠的創造力)。 – 2012-07-12 21:39:49