2
MemoryCache
是一個線程安全的類,根據this的文章。但我不明白它在特定情況下的表現如何。例如我的代碼:MemoryCache Contains()線程安全
static private MemoryCache _cache = MemoryCache.Default;
...
if (_cache.Contains("Test"))
{
return _cache.Get("Test") as string;
}
- 燦元素的存活時間到期我打電話
Contains()
只是經過這麼null
值將被退回? - 可以在我致電
Contains()
後再另一個線程刪除項目null
值會被返回嗎?
如果我想要寫在過期的項目我只是用'其他{字符串結果=「從我的數據庫中的一些數據」新的價值; _cache.Set(「Test」,result,DateTimeOffset.UtcNow.AddSeconds(30));返回結果; }'一切都會好的。這樣對嗎? – ChruS
@ChruS:不,在這種情況下,爲避免競爭條件,您應該使用['AddOrGetExisting'](http://msdn.microsoft.com/zh-cn/library/dd780587.aspx)。 – Jon