加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:10:41 所属栏目:百科 来源:网络整理
导读:string Get(string key){ lock(_sync){ // DoSomething }} 如果DoSomething仅依赖于键,我需要依赖钥匙.我认为它可能是同步对象的字典.有没有完整的解决方案? 像真实的例子 What is the best way to lock cache in asp.net? 解决方法 那么你可以创建一个Dict
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可以使这更容易,而不使用额外的锁.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读