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

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

要回复问题请先登录注册