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 に答える