我有这段代码:
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
),但我可以想象失控的速度非常快,而且非常混乱。
我不需要将它作为属性,但如果它是显而易见的,则需要在此类中保持静态。
答案 0 :(得分:1)
由于它可能是一个多用户环境,因此请将ConcurrentDictionary
替换为input.Name()
,将Value
替换为Key
,将{{1}}替换为唯一标识符用户(id,名称等)。