如何使用异步生成器创建内存缓存
How to create memory cache with async generator
我尝试使用异步 getter 方法创建缓存,该方法在 ASP.NET 5 Core MVC 应用程序中使用 EF Core 从数据库读取数据:
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Threading.Tasks;
public sealed class CacheManager
{
readonly IMemoryCache memoryCache;
public CacheManager(IMemoryCache memoryCache)
{
this.memoryCache = memoryCache;
}
public async Task<T> GetAsync<T>(string key, Task<Func<T>> generatorasync)
{
var cacheEntry = await
memoryCache.GetOrCreateAsync<T>(key, async entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(15 * 60);
return await generatorasync();
});
return cacheEntry;
}
}
行
return await generatorasync();
抛出语法错误
CS0149: Method name expected
要修吗?创建此类缓存的最佳做法是什么?
安德鲁斯
您的方法接受 Task<Func<T>>
这不是方法,因此您不能像调用方法一样调用它,而这正是编译器告诉您的。如果你想将异步方法作为参数传递,你需要将类型更改为 Func<Task<T>>
这是一个函数的签名 returns 然后 Task
然后可以等待。
我尝试使用异步 getter 方法创建缓存,该方法在 ASP.NET 5 Core MVC 应用程序中使用 EF Core 从数据库读取数据:
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Threading.Tasks;
public sealed class CacheManager
{
readonly IMemoryCache memoryCache;
public CacheManager(IMemoryCache memoryCache)
{
this.memoryCache = memoryCache;
}
public async Task<T> GetAsync<T>(string key, Task<Func<T>> generatorasync)
{
var cacheEntry = await
memoryCache.GetOrCreateAsync<T>(key, async entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(15 * 60);
return await generatorasync();
});
return cacheEntry;
}
}
行
return await generatorasync();
抛出语法错误
CS0149: Method name expected
要修吗?创建此类缓存的最佳做法是什么?
安德鲁斯
您的方法接受 Task<Func<T>>
这不是方法,因此您不能像调用方法一样调用它,而这正是编译器告诉您的。如果你想将异步方法作为参数传递,你需要将类型更改为 Func<Task<T>>
这是一个函数的签名 returns 然后 Task
然后可以等待。