ASP.NET MVC 3中的线程化

时间:2012-05-04 14:45:14

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

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

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

任务正常,但由于线程使用了Cookie中的全局数据集,因此在访问具有2个不同用户名的页面时会出现问题。例如,如果我在Firefox中使用“user1”登录,然后尝试使用其他用户(例如“user2”)登录Chrome,则会自动更改为第一个用户收集的异步数据;这意味着我将始终看到从登录的最后一个用户中提取的数据(无论我最初是否与其他用户一起登录过Firefox),而不是彼此的单独数据。

换句话说,线程不会为每个用户单独启动。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

以下建议之一应修复您的线程问题并将您的用户数据分开。

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