C# LazyCache:如何防止将特定项添加到缓存中

C# LazyCache:如何防止将特定项添加到缓存中,c#,memorycache,lazycache,C#,Memorycache,Lazycache,如何防止将特定项添加到缓存。在我的例子中,我考虑防止将null返回添加到缓存中。这就是我目前正在做的: Func<long?> internalGetRecordUri =() => { //it can return null here }; long? output; lock (_lock)

如何防止将特定项添加到缓存。在我的例子中,我考虑防止将null返回添加到缓存中。这就是我目前正在做的:

            Func<long?> internalGetRecordUri =() =>
            {
                //it can return null here
            };

            long? output; 

            lock (_lock)
            {
                output = _cache.GetOrAdd(
                    "GetRecordUri" + applicationId,
                    internalGetRecordUri, new TimeSpan(1, 0, 0, 0));
                if (output == null)
                {
                    _cache.Remove("GetRecordUri" + applicationId);
                }
            }
Func internalGetRecordUri=()=>
{
//它可以在这里返回null
};
长的产出;
锁
{
输出=_cache.GetOrAdd(
“GetRecordUri”+应用程序ID,
internalGetRecordUri,新的时间跨度(1,0,0,0));
if(输出==null)
{
_cache.Remove(“GetRecordUri”+applicationId);
}
}

我相信有更好的方法,因为这种方式实现锁首先会破坏使用LazyCache的目的。

您可以使用MemoryCacheEntryOptions回调生成缓存项,并将到期日期设置为过去(如果为null):

output=\u cache.GetOrAdd(
“GetRecordUri”+123,条目=>{
var record=internalGetRecordUri();
if(记录==null)
//立即到期
entry.AbsoluteExpirationRelativeToNow=新的时间跨度(-1,0,0,0);
其他的
entry.AbsoluteExpirationRelativeToNow=新的时间跨度(1,0,0,0);
返回记录;
});