共享在页面创建的asp.net页面和后台线程之间的变量

我在asp.net web应用程序中有一个长时间运行的任务,因此我在新线程中运行该任务并不断轮询以检查状态(通过使用每隔5秒滴答一次并回传给服务器并检查线程状态的股票代码控制器)。我使用会话状态来分享线程和页面之间的变量。但我知道从后台线程访问会话是一种不好的做法。在线程和创建该线程的asp.net页面之间共享变量的最佳方法是什么?共享在页面创建的asp.net页面和后台线程之间的变量

回答:

我本身并没有看到使用Session的问题 - 它基本上是thread-safe dictionary。您可能需要确保您的后台线程locksSyncRoot; Page类自动执行此操作。

当然,还有其他选项 - 静态变量(但接着进入AppDomain问题)或带外机制(这是Session的内容)就像数据库或消息服务一样。除非您对这些技术有其他需求,否则Session可能是最简单的。

夫妇告诫我能想到的:如果会话过期

  • ,什么从后台线程写它的时候会发生什么?例外?保持活力?
  • 如何检测后台线程是否异常退出?将线程存储在Session中?
  • 如果有一个unhandled exception on the background thread会话会发生什么?

回答:

这不是对您的问题的直接回答,而是对长时间运行的作业使用单独的WCF服务的建议。你的网络服务器真的忙于处理一个长时间的任务,我假设使用大量的CPU。

预期的问题

  • Web服务器的整体性能会下降
  • 您将无法扩展这样的解决方案

另外,考虑将长期运行的逻辑成WCF服务。您可以通过发布具有作业ID的简单AJAX查询来启动并检查作业状态。每个作业都可以在单独的线程中启动,并将结果/状态保存到可查询存储中。

以上是 共享在页面创建的asp.net页面和后台线程之间的变量 的全部内容, 来源链接: utcz.com/qa/257925.html

回到顶部