ASP.Net Core 2.0中的CacheItemRemovedCallback

时间:2017-12-03 18:32:02

标签: caching asp.net-core-mvc

我做了第一次谷歌搜索,寻找asp.net Core中等效的CacheItemRemovedCallback方法,到目前为止已经空了。我使用缓存失效作为一些网络应用程序中的伪服务/计时器,我期待更多的核心。

任何你明智的网络神都可以在这方面折腾我的方向,这是值得赞赏的。

更新:我创建了一个似乎在启动时正确调用的OWIN类,但永远不会调用缓存失效。我很怀念' en som' en。

public class OwinCacheTimer
{
    private readonly RequestDelegate next;

    private IMemoryCache cache;

    public OwinCacheTimer(RequestDelegate next, IMemoryCache memoryCache)
    {
        this.cache = memoryCache;
        this.next = next;
        SetCache(this);
    }

    public  void SetCache(object o)
    {
        /* do work */

        MemoryCacheEntryOptions options = new MemoryCacheEntryOptions();
        options.AbsoluteExpiration = DateTime.Now.AddSeconds(21);
        options.SlidingExpiration = TimeSpan.FromSeconds(20);
        options.RegisterPostEvictionCallback(ExpiredCallback, o);  // <- this doesn't fire
        IMemoryCache x = ((OwinCacheTimer)o).cache;

        /* setting whateve, just so something expires */
        x.Set<string>("timestamp", DateTime.Now.ToString(), options);
    }


    public void ExpiredCallback(object key, object value, EvictionReason reason, object state)
    {
         SetCache(state);

    }

    public async Task Invoke(HttpContext context)
    {
        this.BeginInvoke(context);
        await this.next.Invoke(context);
        this.EndInvoke(context);
    }

    private void BeginInvoke(HttpContext context)
    {
        // Do custom work before controller execution
    }

    private void EndInvoke(HttpContext context)
    {
        // Do custom work after controller execution
    }
}

1 个答案:

答案 0 :(得分:1)

看起来我错过了这一切。您现在可以安排任务而不必执行上述类型的黑客攻击,但如果可能的话,我仍然想知道如何以上述方式执行此操作。看起来正确的计划任务是沿着这些线,只是FYI -

https://blog.maartenballiauw.be/post/2017/08/01/building-a-scheduled-cache-updater-in-aspnet-core-2.html