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我需要一种方法来跟踪整个代码中的原始代码,因为它可以更改,而且由于业务规则ProcessMethod可能会在内部以不同的input.Name值再次调用,我需要说明第二次调用来自input.Name.

显然,这很糟糕,因为如果两个人同时执行此操作,他们将共享相同的MyProp值,并且最后简单地设置为 null 似乎很危险和 hacky。我真的没有选择将此方法更改为非静态的,因为这将涉及更改很多代码库,这不是一个真正的选择。

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

我不需要把它作为一个属性,但如果是的话,它显然需要在这个类中是静态的。

4

1 回答 1

1

由于它可能是一个多用户环境,因此将字符串替换为ConcurrentDictionary您存储input.Name()为 a 的位置Value以及Key用户的唯一标识符(id、名称等)。

于 2013-02-27T15:01:07.407 回答