首先,我知道ObjectCache.AddOrGetExisting做了什么(System.Runtime.Caching命名空间)。我的问题是为什么存在?
这是方法的声明:
public override Object AddOrGetExisting(
string key,
Object value,
CacheItemPolicy policy,
string regionName
)
令我困惑的是参数"值"。 如果我在每次通话时都准备好值,我就不需要缓存 - 我只会使用最新值而不是缓存中的值!
我能想象的唯一用途就是提供Lazy作为价值。但是,如果这是唯一有用的用法,为什么不将Func<object> valueProvider
作为参数接收?
PS:实际上,ObjectCache的整个API看起来更像是一个字典而不是一个现成的缓存。要使用它,我必须创建一个包装器并编写许多其他逻辑,包括同步(我说许多类似的实现采用缓存用于正常使用) - 这不是我对BCL Cache实现的期望。这只是我关心的问题吗?