C#锁定或不锁定

joh*_*boy 9 c# locking

害怕我已经知道了答案.我有一个处理服务调用和缓存的类.为了避免使用相同的请求多次调用服务,我当然可以在代码块周围使用,但是很多这些方法都有不同的参数构成缓存键.当它可能是一个完全不同的缓存密钥(或多个不同的缓存密钥)时,等待锁定代码块执行似乎是一种耻辱.

我知道我可以对缓存密钥字符串本身进行锁定,但这是禁止的,因为该字符串可能会弹出任何地方.

因此,我可以在没有锁的情况下执行对服务的潜在不必要的调用,或者通过等待锁来在方法中添加潜在的不必要的延迟.

那些是我唯一的两个选择还是另一个?

干杯

Ree*_*sey 7

您可能会切换类型以使用线程安全类(如a ConcurrentDictionary<T,U>)来处理缓存.如果使用得当,这可以防止需要锁定(自己的),因为您可以依赖于并发集合本身内置的细粒度锁定.