Я пытаюсь MemoryCache
вызвать моего RemovedCallback
делегата вовремя.Возможно ли это, или это "так хорошо, как получается"?
AbsoluteExpiration
, ниже, установлен на 2 секунды, но на самом деле это заняло 5 секунд - это часто намного, намного дольше, чем это, дажеесли я установлю его на 30 секунд, это будет гораздо более задержано, чем это.
Мой код:
using System;
using System.Runtime.Caching;
namespace MemoryCacheTest
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("started: " + DateTime.Now.ToLongTimeString());
var cache = new MemoryCache("long");
var policy = new CacheItemPolicy
{
AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(2)),
Priority = CacheItemPriority.Default,
RemovedCallback = RemovedCallback
};
Console.WriteLine("cache.GetCount: " + cache.GetCount());
cache.Set("some key", "some string", policy);
Console.WriteLine("cache.GetCount: " + cache.GetCount());
Console.ReadLine();
}
public static void RemovedCallback(CacheEntryRemovedArguments arguments)
{
Console.WriteLine("RemovedCallback: " + arguments.CacheItem.Key + " : " + arguments.CacheItem.Value);
Console.WriteLine("ended: " + DateTime.Now.ToLongTimeString());
}
}
}
Мой вывод:
started: 15:42:55
cache.GetCount: 0
cache.GetCount: 1
RemovedCallback: some key : some string
ended: 15:43:00