You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB中Continuation Token返回Null的问题求助

问题原因及修复方案

核心问题

你代码里的续传令牌赋值完全错误!在QueryFetchNextPage方法中,你把传入的旧continuationToken赋值给了VolcanoResult.ContinuationToken,但实际上续传令牌应该从读取到的page对象里获取新的令牌(即page.ContinuationToken)。

因为调用iterator.ReadNextAsync()获取一页数据后,下一页的续传令牌是存在返回的page对象中的,不是你传入的旧参数。你当前的写法会导致第一次循环就返回null(初始传入的是default(string)也就是null),直接跳出循环,根本没去拉取后续的1575条数据。

修复后的关键代码

修改QueryFetchNextPage方法里的令牌赋值逻辑:

VolcanoResult VolcanoResult = new VolcanoResult();
VolcanoResult.Status = 200;
VolcanoResult.RecordCount = itemCount;
// 替换成从page中获取新的续传令牌
VolcanoResult.ContinuationToken = page.ContinuationToken;
VolcanoResult.Volcanoes = volcanoes;

额外修复:合并所有分页数据

你的GetVolcanoes方法当前只返回最后一页的结果,前面的分页数据都会被覆盖。如果需要返回所有1576条火山数据,需要合并每一页的结果:

public async Task<VolcanoResult> GetVolcanoes()
{
    var finalResult = new VolcanoResult
    {
        Status = 200,
        Volcanoes = new List<Volcano>(),
        RecordCount = 0
    };
    var continuationToken = default(string);
    do
    {
        var pageResult = await QueryFetchNextPage(continuationToken);
        // 合并当前页数据到最终结果
        finalResult.Volcanoes.AddRange(pageResult.Volcanoes);
        finalResult.RecordCount += pageResult.RecordCount;
        continuationToken = pageResult.ContinuationToken;
    } while (continuationToken != null);

    return finalResult;
}

其他优化建议

  • 代码中container.ReadThroughputAsync()没有实际用途,可以删除,减少不必要的数据库请求。
  • 当MaxItemCount设为1时,每调用一次ReadNextAsync()会返回1条数据,直到最后一页时page.ContinuationToken才会变为null。

内容的提问来源于stack exchange,提问作者Sumchans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:46:22