Я пытаюсь создать пул подключений к стороннему API и истекает срок действия соединений через интервал, если они не используются. Когда они истекают, они должны быть отключены через сторонний API.MemoryCache UpdateCallback не работает
Оказалось, что 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
Что я делаю неправильно?
Если есть лучший способ выполнить мою задачу, я открыт для альтернативных предложений.
Ваш пример работает. Я могу получить «сюда», за которым следует «null» (что я и ожидал). Это кажется странным - я думал, что истечение срока действия кеша произойдет в другом потоке. Благодаря! – TrueWill