9

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

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

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

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

干杯

4

1 回答 1

7

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

于 2012-11-08T21:38:14.343 回答