我在 MSDN 上读到,前台线程和后台线程之间的区别在于,应用程序在其所有前台线程都终止之前无法终止,而它不会打扰等待后台线程。我决定尝试一下,只是为了更好地理解线程。
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 重新启动不应该等待我的线程完成执行,然后再开始清除我的会话变量吗?
谢谢