如何解决在asp.net页面和该页面创建的后台线程之间共享变量
|| 我在asp.net Web应用程序中有一个长期运行的任务,因此我在一个新线程中运行该任务,并不断进行轮询以检查线程的状态(通过使用每5秒滴答一次并回发到服务器并检查线程的状态)。我使用会话状态在线程和页面之间共享变量。但是我了解到,从后台线程访问会话是一种不好的做法。在线程和创建该线程的asp.net页面之间共享变量的最佳方法是什么?解决方法
我从本质上看不到使用Session的问题-它基本上是线程安全的字典。您可能需要确保您的后台线程锁定SyncRoot。 Page类会自动执行此操作。
当然,还有其他选择-静态变量(但您会遇到AppDomain问题)或带外机制(如Session或Session)就是数据库或消息服务。但是,除非您对这些技术有其他需求,否则Session可能是最简单的。
我能想到的几点警告:
如果会话期满,从后台线程对其进行写入时会发生什么?例外?保持生命?
如何检测到后台线程异常退出?将线程存储在会话中?
如果后台线程上有未处理的异常,会话将如何处理?
, 这不是您问题的直接答案,而是建议为长期运行的工作使用单独的WCF服务。您的Web服务器真的很忙于执行长任务,我认为这会占用大量CPU。
预期的问题
网络服务器的整体性能将下降
您将无法扩展此类解决方案
或者,考虑将长期运行的逻辑放入WCF服务中。您可以通过发出带有作业ID的简单AJAX查询来启动并检查作业状态。每个作业都可以在单独的线程中启动,并且结果/状态持久保存在可查询的存储中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。