ASP.Net页面中新起线程,页面关闭后线程会关闭吗?
问题:如题,ASP.Net页面中新起线程,页面关闭后线程会关闭吗?
为了验证这个问题可以做个试验,新建一个页面,在页面添加一个按钮,按钮的处理程序如下:
new Thread(() =>
{
Thread.Sleep(5000);
var stream = File.CreateText("c:\\test.txt");
stream.WriteLine("Hello, World!");
stream.Flush();
stream.Close();
}).Start();
{
Thread.Sleep(5000);
var stream = File.CreateText("c:\\test.txt");
stream.WriteLine("Hello, World!");
stream.Flush();
stream.Close();
}).Start();
点击按钮后快速关闭页面,发现文件还是会生成(如果没有创建文件权限,会在事件查看器中看到一条错误消息)。
试验得出的答案是不会?那么这是为什么呢?
在win 2003下,当一个站点被第一次访问时,都会新起一个进程(w3wp)。而每个具体的会话就相当于这个进程的一个线程。每个会话结束仅仅是当前关联的线程结束,w3wp这个进程还在。因此尽管试验中页面关闭了,但新起线程需要的执行环境(w3wp还在),所以该线程还会继续执行。
