管理静态属性的最佳方法

时间:2013-02-27 14:57:22

标签: c# static thread-safety

我有这段代码:

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,因为它可能会发生变化,并且由于业务规则,ProcessMethod可能会因内部使用不同的input.Name值再次调用,我需要声明第二次通话来自input.Name

显然,这是不好的,因为如果两个人同时这样做,他们将共享相同的MyProp值,并且在最后简单地使得为空似乎是危险和hacky。我真的没有选择将此方法更改为非静态,因为这将涉及更改大量代码库,这实际上不是一个选项。

使用静态属性有什么方法,但仍然能够保留原始input.Name值而不会有线程安全问题?我想的一个选择是让每个方法都接受input.Name()并跟踪是这样的(并移除MyProp),但我可以想象失控的速度非常快,而且非常混乱。

我不需要将它作为属性,但如果它是显而易见的,则需要在此类中保持静态。

1 个答案:

答案 0 :(得分:1)

由于它可能是一个多用户环境,因此请将ConcurrentDictionary替换为input.Name(),将Value替换为Key,将{{1}}替换为唯一标识符用户(id,名称等)。