C#锁定或不锁定

时间:2012-11-08 21:31:36

标签: c# locking

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

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

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

这些是我唯一的选择还是另外两种?

干杯

1 个答案:

答案 0 :(得分:7)

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