2012-05-04 57 views
2

我目前正在將Windows Phone 7應用程序轉換爲它的Web對象。應用程序使用一個大的主線程從中收集數據,並且目前我剛剛複製並粘貼它(僅僅是一個標準的線程操作),在我的ASP.NET MVC控制器中。在ASP.NET MVC 3中線程化

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

任務工作確定,但因爲線程利用全球數據從餅乾套,設有2名不同的用戶名訪問頁面時出現的問題。例如,如果我在Firefox中使用「user1」登錄,然後嘗試使用其他用戶(例如「user2」)在Chrome中登錄,則它會自動更改爲第一位用戶收集的異步數據;這意味着我將始終看到從最後一位用戶登錄的數據(不管我最初是否與其他用戶一起在Firefox中登錄),而不是彼此獨立的數據。

換句話說,線程不會爲每個單獨的用戶單獨啓動。我如何解決這個問題?

+0

'Sync'類型是否利用任何'static'字段或屬性來存儲用戶數據? –

+0

「線程使用來自cookie的全局數據集」,這對我來說聽起來不太合適,也許當您創建「Sync」對象時,您可以爲其指定一個值,以便將其唯一地綁定到特定用戶,而不是使用全局變量。 – Matthew

+1

@ChrisShouts是的,同步所需的所有全局字段都保留在靜態對象中。我應該每次創建一個新的實例嗎? – Kyprulez

回答

3

Static字段和屬性在線程間共享,通常不應用於存儲與特定用戶或Web請求有關的數據。

以下建議之一應該解決您的線程問題並保持您的用戶數據分離。

  • 爲每個請求創建Sync類的實例,並從該類中刪除任何static字段/屬性。
  • Sync類添加一個方法,該方法返回特定用戶的數據實例,而不是將數據存儲在static字段/屬性中。
+0

事實上,改變靜態字段解決了這個問題。非常感謝你! – Kyprulez