gpt4 book ai didi

c# - 使用 LazyCache 的最小起订量和异步乐趣

转载 作者:行者123 更新时间:2023-12-05 09:19:19 24 4
gpt4 key购买 nike

我正在尝试模拟一个名为 GetOrAddAsync 的函数。它被定义为:

Task<T> GetOrAddAsync<T>(string key, Func<Task<T>> addItemFactory, DateTimeOffset expires);

当我在实际代码中使用它时,我会这样使用它:

DateTimeOffset cacheTimeout = new DateTimeOffset(DateTime.Now.AddHours(config.CacheHours));
Func<Task<IEnumerable<int>>> func = async () => await (from s in dbContext.Names select s.First).ToListAsync();

return await cache.GetOrAddAsync(key, func, cacheTimeout);

所以基本上,如果 key 存在,它将返回其中的内容,如果不存在,它将创建一个 key 并用传入的 Func<> 返回的数据填充它。

到目前为止,我对此的模拟尝试如下:

cache.Setup(x => x.GetOrAddAsync(It.IsAny<string>(), It.IsAny<Func<Task<IEnumerable<int>>>>(), It.IsAny<DateTimeOffset>()))
.ReturnsAsync(async (string key, Func<Task<IEnumerable<int>>> func, DateTimeOffset policy) =>
{
return await func.Invoke();
});

但是,这会返回一个错误:

无法将 lambda 表达式转换为类型“IEnumerable”,因为它不是委托(delegate)类型。

我的头脑已经准备好用这个语法来爆炸了:)

最佳答案

与其自己使用 Moq 模拟 LazyCache API,为什么不直接使用框架提供的模拟版本呢?它只执行要缓存的任何委托(delegate),从不执行任何缓存。查看MockCachingService.cs

关于c# - 使用 LazyCache 的最小起订量和异步乐趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com