首页 新闻 会员 周边

.NET 中如何将 redis 中 List 类型的数据读取为 IAsyncEnumerable

0
悬赏园豆:30 [已解决问题] 解决于 2026-02-18 18:43

这是今天在代码重构中遇到的问题,当前代码中将整个博文列表序列化为一个字符串后保存在redis 中,读取时将整个字符串反序列化为博文列表。重构中改用 redis List 保存博文列表,将博文一篇一篇添加到列表,读取时想将这个 List 读取为 .NET 的 IAsyncEnumerable 类型,请问如何用 C# 代码实现?

dudu的主页 dudu | 高人七级 | 园豆:23366
提问于:2026-02-18 12:47
< >
分享
最佳答案
0

参考 AI 的回答,用下面的代码实现了

public async IAsyncEnumerable<T> ReadRedisListAsync<T>(string listKey, int pageSize = 20)
{
    long start = 0;
    while (true)
    {
        long stop = start + pageSize - 1;

        RedisValue[] values = await redis.Database.ListRangeAsync(listKey, start, stop);

        if (values == null || values.Length == 0)
            break;

        foreach (var value in values)
        {
            var item = redis.Serializer.Deserialize<T>(value!);
            if (item == null) continue;
            yield return item;
        }

        start += pageSize;

        if (values.Length < pageSize)
            break;
    }
}
dudu | 高人七级 |园豆:23366 | 2026-02-18 18:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册