我做了第一次谷歌搜索,寻找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
}
}
答案 0 :(得分:1)
看起来我错过了这一切。您现在可以安排任务而不必执行上述类型的黑客攻击,但如果可能的话,我仍然想知道如何以上述方式执行此操作。看起来正确的计划任务是沿着这些线,只是FYI -