-1

この種のことがここで何度も尋ねられていることは知っていますが、ASP のスレッド セーフについてはまだ完全には理解していません。

C#: Util は静的クラスで、theList は静的リストです。

Util.theList= new List<Object>();
 Util.theList.Add(someObject);

ページが 1 回読み込まれ、1 秒後 (ポストバックの 1 秒後) に Util.theList が読み込まれ、ページがリロードされて、新しく読み込まれたリスト データがバインドされます。

this.Repeater.DataSource = Util.theList;
            this.Repeater.DataBind();

theList が読み込まれるたびに、INSTANTIATED になります。

Util.theList= new List<Object>(); 

これがスレッドセーフでない場合、どうすればスレッドセーフにできますか? データが page_load にバインドされている場合にのみデータがバインドされるという別の問題があるため、リストを非静的で同じページに配置することはできません: OnDataBind は最初のポストバックでのみ起動します

4

2 に答える 2

6

静的変数はリクエスト間で共有されるため、明らかに安全ではありません。ページ インスタンス フィールドなど、特定のリクエストに固有の場所にリストを移動します。

ポストバック間で状態を渡す必要がある場合は、ViewState またはその他の非グローバル メカニズムを使用します。

于 2013-02-25T17:25:57.973 に答える
0

静的変数を一緒に避けるのが最善です。静的変数は、単体テストにはあまり適していません。静的クラスと変数は、スタブ化またはモック化できません。

ただし、インスタンスでは、静的変数はスレッドセーフではありません。

于 2013-02-25T18:40:56.387 に答える