遗憾的是,MemoryCache.Set的MSDN文档没有明确说明它是否是线程安全的.
是否可以安全地使用.Get()并且.Set()没有显式锁定的几个线程?
我正在尝试使用MemoryCache.net 4.5跟踪并自动更新各种项目,但似乎无论我设置什么,AbsoluteExpiration它总是只会在15秒或更长时间内到期.
我希望缓存项目每5秒到期,但它总是在至少15秒内到期,如果我将到期时间移出,它最终将达到15秒+我的刷新间隔,但绝不会少于15秒.
是否有一些内部定时器分辨率,我没有看到?我查看了一些反映的System.Runtime.Caching.MemoryCache代码,并没有什么突出的我,我没有找到任何其他人在互联网上有这个问题.
我在下面有一个非常基本的例子来说明问题.
我想要的是CacheEntryUpdate每5秒左右被击中并用新数据更新,但是,正如我所说,它只会在15秒内被击中.
static MemoryCache MemCache;
static int RefreshInterval = 5000;
protected void Page_Load(object sender, EventArgs e)
{
if (MemCache == null)
MemCache = new MemoryCache("MemCache");
if (!MemCache.Contains("cacheItem"))
{
var cacheObj = new object();
var policy = new CacheItemPolicy
{
UpdateCallback = new CacheEntryUpdateCallback(CacheEntryUpdate),
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMilliseconds(RefreshInterval)
};
var cacheItem = new CacheItem("cacheItem", cacheObj);
MemCache.Set("cacheItem", cacheItem, policy);
}
}
private void CacheEntryUpdate(CacheEntryUpdateArguments args)
{
var cacheItem = MemCache.GetCacheItem(args.Key);
var …Run Code Online (Sandbox Code Playgroud)