Я пытаюсь создать пул подключений к стороннему 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
Что я делаю неправильно?
Если есть лучший способ выполнить мою задачу, я открыт для альтернативных предложений.