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仅依赖于键,我需要依赖钥匙.我认为它可能是同步对象的字典.有没有完整的解决方案? 像真实的例子 解决方法
那么你可以创建一个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可以使这更容易,而不使用额外的锁. 请注意,在这个设计中没有什么可以清除字典…你有一套固定的键(在这种情况下还可以),还是可以永久增长? 你似乎已经意识到一件事情:锁定键本身将是一个非常糟糕的主意.等密钥可以是不同的对象,如果还有其他代码也锁定在字符串上,它可能会干扰这个代码.锁定字符串几乎总是错误的:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |