MemoryCache UpdateCallback не работает

Я пытаюсь создать пул подключений к стороннему API, и срок действия подключений истекает через определенный интервал, если они не используются. По истечении срока их действия необходимо отключить через сторонний API.

Оказалось, что с этим справится MemoryCache (System.Runtime.Caching). Однако UpdateCallback, похоже, ведет себя странно.

Простой пример LINQPad:

void Main()
{
    var cache = MemoryCache.Default;
    var policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(1);
    policy.UpdateCallback = Update;
    cache.Set("figkey", "fig", policy);

    Thread.Sleep(2000);

    object result = cache.Get("figkey");

    Console.WriteLine(result == null ? "null" : result);
}

public static void Update(CacheEntryUpdateArguments arguments)
{
    Console.WriteLine("got here");
}

Если я запущу это, вывод будет следующим:

fig

Он НЕвыводит "попал сюда".

Если я закомментирую строку, начинающуюся с policy.UpdateCallback, вывод будет следующим:

null

Что я делаю неправильно?

Если есть лучший способ выполнить мою задачу, я открыт для альтернативных предложений.

5
задан TrueWill 10 March 2012 в 22:09
поделиться