在.Net核心MVC中缓存IMemoryCache读通

在.Net核心MVC中缓存IMemoryCache读通,.net,caching,asp.net-core,.net,Caching,Asp.net Core,在.net核心web应用程序中实现了缓存读通,如下所示。希望验证这是否正常,否则我可能会遇到问题 Startup.cs,ConfigureServices services.AddMemoryCache(); 助手/扩展方法 public static class MemoryCacheExtensions { internal static async Task<T> ReadThrough<T>(this IMemoryCache cache, string

在.net核心web应用程序中实现了缓存读通,如下所示。希望验证这是否正常,否则我可能会遇到问题

Startup.cs,ConfigureServices

services.AddMemoryCache();
助手/扩展方法

public static class MemoryCacheExtensions
{
    internal static async Task<T> ReadThrough<T>(this IMemoryCache cache, string key, Func<Task<T>> func, int minutes = 1440) where T : new()
    {
        var items = new T();
        if (cache.TryGetValue(key, out items)) return items;
        items = await func();
        if (items != null) cache.Set(key, items, TimeSpan.FromMinutes(minutes));
        return items;
    }
}
公共静态类MemoryCacheExtensions
{
内部静态异步任务ReadThrough(此IMemoryCache缓存,字符串键,Func Func,int minutes=1440),其中T:new()
{
var items=newt();
if(cache.TryGetValue(key,out items))返回项目;
items=wait func();
if(items!=null)cache.Set(key,items,TimeSpan.FromMinutes(minutes));
退货项目;
}
}
用法

internal readonly IMemoryCache _cache;
public async Task<IActionResult> Active()
{
    var children = new List<Child>();
    var key = "children-active";
    return Json(await _cache.ReadThrough<List<Child>>(key, () => { return _context.Child.AsNoTracking().Where(c => c.IsActive == true).ToListAsync(); }));
}
内部只读IMemoryCache\u缓存;
公共异步任务活动()
{
var children=新列表();
var key=“儿童活动”;
返回Json(wait _cache.ReadThrough(key,()=>{return _context.Child.AsNoTracking().Where(c=>c.IsActive==true.toListSync();}));
}
当前用于缓存EF查询结果。这是否正常,或者是否存在任何与反射(性能)相关、与线程相关或其他问题