【问题标题】:Threading in ASP.NET MVC 3ASP.NET MVC 3 中的线程
【发布时间】:2012-05-04 14:45:13
【问题描述】:

我目前正在将一个 Windows Phone 7 应用程序转换为它的 Web 应用程序。该应用程序使用一个大的主线程来收集数据,目前我只是在我的 ASP.NET MVC 控制器中按原样复制并粘贴它(只是一个标准线程操作)。

Sync _Sync = new Sync();
_Sync.StartSync();

任务工作正常,但由于线程使用来自 cookie 的全局数据集,因此在使用 2 个不同的用户名访问页面时会出现问题。例如,如果我在 Firefox 中使用“user1”登录,然后尝试使用另一个用户(例如“user2”)登录 Chrome,那么它将自动更改为第一个用户收集的异步数据;这意味着我将始终看到从上次登录的用户中提取的数据(不管我最初是与另一个用户一起登录 Firefox 的事实),而不是彼此的单独数据。

换句话说,线程不会为每个单独的用户单独启动。我该如何解决这种行为?

【问题讨论】:

  • 您可以按用户名个性化同步吗?
  • Sync 类型是否使用任何static 字段或属性来存储用户数据?
  • “线程使用 cookie 中的全局数据集”,这对我来说听起来不太好,也许当您创建 Sync 对象时,您可以为其分配一个唯一关联的值它给特定用户,而不是使用全局变量。
  • @ChrisShouts 是的,同步所需的所有全局字段都保留在静态对象中。我应该每次都创建一个新实例吗?
  • 很遗憾,我无法以这种方式对其进行个性化设置。

标签: c# asp.net .net multithreading asp.net-mvc-3


【解决方案1】:

Static 字段和属性在线程之间共享,通常不应用于存储与特定用户或 Web 请求相关的数据。

以下建议之一应该可以解决您的线程问题并保持您的用户数据独立。

  • 为每个请求创建一个Sync 类的实例,并从该类中删除任何static 字段/属性。
  • Sync 类添加一个方法,该方法返回特定用户的数据实例,而不是将数据存储在static 字段/属性中。

【讨论】:

  • 确实,改变静态字段解决了这个问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2023-03-12
相关资源
最近更新 更多