Опитвам се да създам набор от връзки към 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
какво правя грешно
Ако има по-добър начин да изпълня задачата си, отворен съм към алтернативни предложения.