0
内の項目を更新しない:MemoryCacheは、私は私の問題を実証する(linqpadで)次のコードを記述Updatecallback
void Main()
{
var waitEvent = new AutoResetEvent(false);
MemoryCache.Default.Set(
"test",
"value",
new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.UtcNow.Add(TimeSpan.FromSeconds(5)),
UpdateCallback = (CacheEntryUpdateArguments e) => {
waitEvent.Set();
e.Dump();
e.UpdatedCacheItem = new CacheItem(e.Key, "value2");
}
});
MemoryCache.Default.Get("test").Dump();
waitEvent.WaitOne();
waitEvent.WaitOne(TimeSpan.FromSeconds(10));
MemoryCache.Default.Get("test").Dump();
}
// Define other methods and classes here
結果は以下の通りです:
誰もが理由を説明することができます私は結果として "value2"を得ることができないのですか?
に
CacheItemPolicy
オブジェクトを割り当てることができますが、それは動作しません。しかし、あなたの答えは、詳細についてソースコードをチェックできるということを思い出させます。そのため、ソースコードでは、ポリシーは1)モニタに変更がない場合のみ有効です。2)新しいポリシーのコールバック関数があります。私は、なぜ私は新しいupdatecallback関数を与える場合、アイテムがコールバックがあるときにのみ更新することができないのか分からない、結果は正しいでしょう。だから、同じことに感謝します。 – winterTTr