9
正确使用.NET MemoryCache的锁定模式
我认为这段代码存在并发问题: const string CacheKey = "CacheKey"; static string GetCachedData() { string expensiveString =null; if (MemoryCache.Default.Contains(CacheKey)) { expensiveString = MemoryCache.Default[CacheKey] as string; } else { CacheItemPolicy cip = new CacheItemPolicy() { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(20)) }; expensiveString = SomeHeavyAndExpensiveCalculation(); MemoryCache.Default.Set(CacheKey, expensiveString, cip); } return expensiveString; } 并发问题的原因是多个线程可以获取空键,然后尝试将数据插入缓存。 进行此代码并发证明的最短,最干净的方法是什么?我喜欢在与缓存相关的代码中遵循良好的模式。链接到在线文章会很有帮助。 更新: 我根据@Scott Chamberlain的答案提出了此代码。有人能找到与此相关的任何性能或并发问题吗?如果可行,它将节省很多代码和错误。 …