Как сделать обратный вызов MemoryCache вовремя? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь 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
...