1

私はこのコードを持っています:

public static class ProcessClass()
{
     public static string MyProp {get;set;}

     public static void ProcessMethod(InputObject input)
     {
         if(String.IsNullOrEmpty(MyProp)
              MyProp = input.Name();

         //do stuff

         MyProp = null;

     }   

 }

これで、 を除くすべてMyPropがすでに整っていました。元のコードは変更される可能性があり、またビジネス ルールにより異なる値で内部的に再度呼び出される可能性がinput.Nameあるため、コード全体で元のコードを追跡する方法が必要でした。この 2 回目の呼び出しは.ProcessMethodinput.Nameinput.Name

2 人が同時にこれを行うと、両方とも同じMyProp値を共有し、単に最後に null を作成することは危険でハッキーに見えるため、明らかにこれは悪いことです。このメソッドを非静的に変更するオプションは実際にはありません。これは、実際にはオプションではないコードベースの多くを変更する必要があるためです。

input.Name静的プロパティを使用しながら、スレッド セーフの問題を危険にさらすことなく元の値を維持できる方法はありますか? 私が考えている 1 つのオプションは、すべてのメソッドに を受け入れさせ、input.Name()その方法を追跡する (そして を削除するMyProp) ことです。

これをプロパティにする必要はありませんが、そうである場合は、明らかにこのクラスで静的にする必要があります。

4

1 に答える 1

1

マルチユーザー環境である可能性があるため、文字列をユーザーの一意の識別子 (ID、名前など)として保存ConcurrentDictionaryする場所に置き換えます。input.Name()ValueKey

于 2013-02-27T15:01:07.407 に答える