MemoryCache类公开了一个名为 .AddOrGetExisting 的方法,这是一种线程安全的方法来获取是否存在,如果不存在则添加。
NULL
如果缓存的对象不存在,则此方法返回。我想我理解它的价值,因为它向用户提供了关于它在缓存中存在的反馈。
我的缓存解析器如下所示:
private static T GetCachedCollection<T>(Guid cacheKey, Lazy<T> initializer)
{
return (T) (MemoryCache.Default.AddOrGetExisting(cacheKey.ToString(), initializer.Value, _policy) ?? initializer.Value);
}
我想要完成的是,除非需要,否则不会创建对象,如果需要,我不想构造它两次。
我担心的是,当我将.Value
我的Lazy
类型作为参数传递时,它可能会调用初始化程序,而不管该项目是否在缓存中找到。但是,如果我正确理解 JIT,它将传递方法的委托而不是调用它。
我应该如何实现这些目标:
- 如果对象初始化程序已存在于缓存中,则不要调用它
- 如果它不在缓存中,则只调用一次。