【发布时间】:2011-05-28 00:54:05
【问题描述】:
我在我的 asp.net Web 应用程序中有一个长时间运行的任务,因此我在一个新线程中运行该任务并不断轮询以检查线程的状态(通过使用每 5 秒打勾的自动收报机控件和回发到服务器并检查线程的状态)。我使用 Session State 在线程和页面之间共享变量。但我了解到,从后台线程访问会话是一种不好的做法。在线程和创建该线程的 asp.net 页面之间共享变量的最佳方法是什么?
【问题讨论】:
-
But I learned that it is a bad practice to access the session from a background thread它(据说)有什么“坏处”?它只是访问内存中的一个指针。 -
@Cos Callis:我认为它不好的一个明显原因是,如果它是一个长时间运行的任务,会话可能会由于各种原因在完成之前终止。此外,如果用户在多个选项卡中浏览站点,则可能会覆盖值(例如,如果用户尝试对两个不同的参数集执行相同的操作,那么编写覆盖它们的代码非常容易,等等) .
-
@Chris (& @NLV...) 但是如果服务(长时间运行的任务)使用会话作为服务和页面之间的通信层(
I used the Session State to share the variables between the thread and the page)那么放弃的会话不应该影响服务,反之亦然......至于多个页面是否会导致冲突,这将是一个场景驱动的问题,可能会或可能不会出现。我仍然不准备同意在这种情况下使用会话是“坏的”。 (虽然可以证明其他东西更好......) -
@Cos Callis:我承认我没有深思熟虑,但我想说拥有一个可能被其他东西(例如其他页面调用)覆盖的共享资源似乎很糟糕主意。问题是它是页面和服务之间的通信,任何人都可以通过删除、写入其他内容等来搞砸。话虽如此,但没有人提出更好的方法来做到这一点,所以可能是其他技术将其作为最佳解决方案是不切实际的,因此几乎可以定义为不错的做法。 :)
标签: c# asp.net multithreading session-variables