线程在网页中运行

时间:2010-10-06 13:51:22

标签: asp.net multithreading thread-safety

如果我浏览到页面加载中包含以下内容的asp.net网页,关闭浏览器后线程将继续运行多长时间?我会假设它会自行完成,但我不确定它是否会在会话结束时终止,或类似的东西。

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

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

可以用于缩短任务。我有一个报告系统可以做到这一点,这样当用户快速获得报告的第一部分时,可以单独生成统计数据,以便在客户端访问它们时就可以使用它们。对于运行时间较长的进程(在我的情况下超过30秒),您将需要利用某种服务并将您的任务添加到队列中。

您还需要考虑如果应用程序池循环使用它将终止您的线程,以便提供额外的动力来将这些线程移动到其他位置。

最后,您需要一些方法来表明您的流程已完成。考虑如何知道线程何时完成,这样如果再次尝试请求,则不会生成可能已处理的相同数据集。