2010-10-06 65 views
1

如果我浏览到页面加载中具有以下内容的asp.net网页,关闭浏览器后线程将继续运行多长时间?我会认为它会自己完成,但我不确定它会在会话结束时终止,或者类似的事情。在网页中运行的线程

protected void Page_Load(object sender, EventArgs e) { 
    Thread T = new Thread(new ThreadStart(longRunningMethod)); 
    T.Start(); 
} 

谢谢。

回答

3

当线程中的代码停止时,即当longRunningMethod()终止时,线程将停止。

这就是为什么在应用程序服务器中开始自己启动线程是一个危险的想法,至少在不管理它们的生命周期的情况下(即提供线程在一定时间后关闭的逻辑,确保释放资源,提供一次可以运行多少“工作线程”的上限等)。

如果每次访问特定网页导致在服务器上启动一个单独的线程,并且线程可能永远运行,那么最终足够的这些访问将使应用程序服务器瘫痪。

+0

当然。这是一个过于简单的例子,只是为了获得一个概念。感谢您的答复。 – 2010-10-06 13:57:32

2

可以使用较短的任务。我有一个报告系统,可以在用户快速获取报告的第一部分时分别生成统计数据,以便在客户到达这些数据时就可以做好准备。对于长时间运行的进程(在我的情况下超过30秒),您将需要利用某种服务并将您的任务添加到队列中。

您还需要考虑如果应用程序池回收它将终止您的线程,以便提供额外的动机将这些线程移到其他地方。

最后,您将希望通过某种方式表明您的流程已完成。考虑如何知道线程何时完成,以便如果再次尝试请求,则不会生成可能已在处理的同一组数据。