ASP.NET检查长时间运行的线程上的线程状态?

时间:2009-05-18 14:12:13

标签: .net asp.net multithreading

我遇到用户请求执行长时间运行的情况。我计划在代码隐藏中的另一个线程上启动它并向用户“处理”返回消息。然后每隔几秒左右我会轮询(通过异步调用)线程的状态。线程完成后,我想显示成功消息。

问题,如何在原始请求完成后轮询线程?

据我了解,Page对象将分离出一个单独的线程。请求完成后,Page对象不再存在......但该线程呢?如何获取我创建的该线程的状态?

2 个答案:

答案 0 :(得分:3)

嗯,您需要一些方式来识别请求。如果您希望能够将其扩展到多台计算机,则应该考虑将请求ID和当前状态存储在数据库中(或者某些类似的可从任何位置访问的存储)。

如果你不关心那种情况你并不担心AppDomain回收,你可能只有一个从请求ID到状态的单例字典 - 但是考虑让它自动刷新自己之后一段时间,如果客户刚刚离开,并没有检查状态。

(当然它不一定是真正的单例 - 它可能是依赖注入提供的一些共享资源,但重点是需要以某种方式共享 以便你可以获得它来自新的请求。)

您还可以使用会话支持的对象 - 再次提供有关多服务器网站和AppDomain回收的警告。

答案 1 :(得分:0)

我不同意Jon的回答。您不需要一种识别请求的方法,您需要一种唯一标识请求创建的线程的方法。然后你的ajax请求轮询线程可以检查线程是否已完成执行。我不明白为什么原始请求完全相关......