2

MemoryCache根据这篇文章,是一个线程安全的类。但我不明白它在特定情况下会如何表现。例如我有代码:

static private MemoryCache _cache = MemoryCache.Default;

...

if (_cache.Contains("Test"))
{
    return _cache.Get("Test") as string;
}
  1. 元素的生存时间可以在我调用之后过期吗Contains(),所以null值会被返回?
  2. 另一个线程可以在我调用之后删除项目,Contains()因此null将返回值吗?
4

1 回答 1

3

是的,是的,这些是常见的竞争条件。如果只需将代码编写为

var test = _cache.Get("Test");
if (test != null) {
    return test as string;
}
于 2012-10-24T09:05:30.697 回答