代码之家  ›  专栏  ›  技术社区  ›  dev.e.loper

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

  •  0
  • dev.e.loper  · 技术社区  · 16 年前

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

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

    据我所知,页面对象将脱离单独的线程。当请求完成时,页面对象就不再存在了……但是那个线程呢?如何获取我创建的线程的状态?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    16 年前

    好吧,你需要 一些 识别请求的方式。如果您希望能够将此扩展到多台计算机,那么应该考虑将请求ID和当前状态存储在数据库中(或者从任意存储中类似地访问一些数据库)。

    如果你不在乎那种情况 您不担心AppDomain的回收,您只需要一个从请求ID到状态的单例字典,但是如果客户机不检查状态,考虑让它在一段时间后自动刷新。

    (当然,它不必是真正的单例——它可以是一些通过依赖注入提供的共享资源,但关键是它需要共享 以某种方式 所以你可以从新的请求中得到。)

    您还可以潜在地使用会话支持的对象——同样需要注意多服务器网站和 AppDomain 回收。

        2
  •  0
  •   KyleM    14 年前

    我不同意乔恩的回答。您不需要一种标识请求的方法,您需要一种唯一标识请求创建的线程的方法。然后,查询线程的Ajax请求可以检查线程是否已完成执行。我不明白为什么最初的要求是相关的…

    推荐文章