c# – 如何通过方法参数锁定?

前端之家收集整理的这篇文章主要介绍了c# – 如何通过方法参数锁定?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
string Get(string key){
   lock(_sync){
    //   DoSomething
   }
}

如果DoSomething仅依赖于键,我需要依赖钥匙.我认为它可能是同步对象的字典.有没有完整的解决方案?

像真实的例子
What is the best way to lock cache in asp.net?

解决方法

那么你可以创建一个Dictionary< string,object>并懒惰地填充对象以锁定.例如:
readonly Dictionary<string,object> dictionary = new Dictionary<string,object>();
readonly object dictionaryLock = new object();

string Get(string key) {
    object bodyLock;
    lock (dictionaryLock) {
        if (!dictionary.TryGetValue(key,out bodyLock)) {
            bodyLock = new object();
            dictionary[key] = bodyLock;
        }
    }
    lock (bodyLock) {
        ...
    }
}

如果你需要以同样的方式在其他地方锁定,我会将“锁定查找”部分移到辅助方法中.请注意,如果您使用.NET 4,ConcurrentDictionary可以使这更容易,而不使用额外的锁.

请注意,在这个设计中没有什么可以清除字典…你有一套固定的键(在这种情况下还可以),还是可以永久增长?

你似乎已经意识到一件事情:锁定键本身将是一个非常糟糕的主意.等密钥可以是不同的对象,如果还有其他代码也锁定在字符串上,它可能会干扰这个代码.锁定字符串几乎总是错误的:)

猜你在找的C#相关文章