gpt4 book ai didi

c# - 当我重新启动 AppDomain 时,前台线程没有阻止应用程序

转载 作者:行者123 更新时间:2023-11-30 15:38:26 24 4
gpt4 key购买 nike

我在 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!");
}
}

我使用 session 变量来了解 AppDomain 是否已重新启动,因为 session 在 AppDomain 重新启动时被清除。

所以当我保存 web.config 文件时,它应该触发 AppDomain 重新启动,这应该要求它等待我长时间运行的线程 t 因为 t 是在前台运行。但是,当我触摸 web.config 文件时,会直接清除我的 Session["checker"] 并打印出“我在这里!”,所以我知道我的应用程序没有等待我的主题。

我是否误解了前台线程应该如何工作? AppDomain 不应该在它开始清除我的 session 变量之前等待我的线程完成执行吗?

谢谢

最佳答案

请注意“应用程序在其所有前台线程终止之前无法终止”语句中的“应用程序”一词。在回收的情况下,应用程序不会终止。在回收过程中,ASP.NET 正在卸载旧的 AppDomain 并加载新的 AppDomain。一切都在单一进程中完成。进程未终止。在 AppDomain 卸载的范围内,所有线程(后台和前台)都被杀死。因此,ASP.NET 不会在回收期间等待前台线程完成。尝试在其 Main 方法中创建前台线程的简单控制台应用程序。它会一直工作到线程终止为止。

关于c# - 当我重新启动 AppDomain 时,前台线程没有阻止应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com