2

現在、WindowsPhone7アプリケーションを対応するWebアプリケーションに変換しています。アプリケーションは、データが収集される大きなメインスレッドを使用します。今のところ、ASP.NET MVCコントローラーでデータをそのままコピーして貼り付けています(標準のスレッド操作のみ)。

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

タスクは正常に機能しますが、スレッドはCookieからのグローバルデータセットを利用するため、2つの異なるユーザー名でページにアクセスすると問題が発生します。たとえば、Firefoxで「user1」を使用してログインし、別のユーザー(「user2」など)を使用してChromeにログインしようとすると、最初のユーザーについて収集された非同期データが自動的に変更されます。つまり、(最初は別のユーザーと一緒にFirefoxにログインしたばかりであるにもかかわらず)最後にログインしたユーザーから引き出されたデータが常に表示され、互いの個別のデータは表示されません。

つまり、スレッドは個々のユーザーごとに個別に開始されるわけではありません。この動作を修正するにはどうすればよいですか?

4

1 に答える 1

3

Staticフィールドとプロパティはスレッド間で共有されるため、通常、特定のユーザーまたはWebリクエストに関連するデータを格納するために使用しないでください。

次の提案のいずれかで、スレッドの問題を修正し、ユーザーデータを分離しておく必要があります。

  • Syncリクエストごとにクラスのインスタンスを作成し、staticクラスからフィールド/プロパティを削除します。
  • フィールド/プロパティSyncにデータを格納する代わりに、特定のユーザーのデータのインスタンスを返すメソッドをクラスに追加します。static
于 2012-05-04T15:12:44.810 に答える