0

時々、あなたが知っていると思っていた単純なことが頭をバズバタさせます....

非静的クラスの静的メソッドを使用して PostBack で処理を行う Asp.Net (フォーム) アプリケーションがあります。これらのメソッドは bool を返す必要があります。

静的メソッドでエラーが発生した場合、例外をページ レベルのコードに戻すだけでなく、静的メソッドで明示的に処理して false を返すことを好みます。

私はこれを考えすぎているかもしれませんが、MyClass に静的な ErrorMessage フィールドがある場合、次のように Page で使用されます。

if(!MyClass.DoSomething){
  errorLabel.Text = MyClass.ErrorMessage; //Static ErrorMessage is set 
}

MyClass は静的ではなく、Page は特定の HttpContext 内に存在し、変数は PostBack で破棄されるため、ErrorMessage は事実上スレッドセーフであるというのは正しいですか?

そうでない理由、またはより良い方法はありますか?

4

2 に答える 2

1

ErrorMessageによって設定されている場合DoSomething、それはスレッドセーフではありません。if テストの後、割り当ての前にコンテキスト スイッチを取得すると、別のスレッドによって再割り当てされる可能性があります。静的フィールドは、それを含むクラスが静的かどうかに関係なく静的です。

C スタイルの戻りコードを取り除き、代わりにエラー時に例外をスローします。

于 2012-02-14T23:05:12.870 に答える
0

いいえ、あなたのコードはスレッドセーフではありません。クラスが静的であるかどうかに関係なく、静的変数にアクセスして状態を保持できます。コントロールが戻る前に、他のスレッドがこの変数の内容を簡単に変更できます。

于 2012-02-14T23:09:23.973 に答える