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