【问题标题】:Azure Table Query async - continuation token always returnedAzure 表查询异步 - 始终返回继续令牌
【发布时间】:2014-12-03 04:01:40
【问题描述】:

我正在尝试使用 ExecuteQuerySegmentedAsync 对 Azure 表存储执行异步 TableQuery。相关部分代码如下:

public async Task<List<MyEntity>> GetTableData()
{
    CloudTableClient tableClient = GetTableClient();

    CloudTable table = tableClient.GetTableReference("MyTableName");

    TableQuery<MyEntity> query = new TableQuery<MyEntity>().Take(10);

    List<MyEntity> results = new List<MyEntity>();
    TableContinuationToken token = null;

    do
    {
        var seg = await table.ExecuteQuerySegmentedAsync(query, token);
        token = seg.ContinuationToken;
        results.AddRange(seg.Results);
    }
    while (token != null);

    return results
}

问题在于,虽然ExecuteQuerySegmentedAsync 返回正确的记录数,但延续标记永远不会为空,并且代码会不断循环。

谁能指出我正确的方向?

我使用的是 Windows Azure 存储 4.3.0.0

【问题讨论】:

    标签: c# azure async-await azure-table-storage azure-storage


    【解决方案1】:

    这是预期的行为。基本上,您一次从表中获取所有实体,包含 10 个实体 (new TableQuery&lt;MyEntity&gt;().Take(10))。因此,在一次调用中,表服务会返回 10 个实体,并且因为表中有超过 10 个实体(我假设),它会返回一个继续令牌,因此循环继续。

    【讨论】:

    • 嗯,好吧,如果我只想返回总共 10 个结果,是否需要在 while 循环中保留计数,或者是否有更好的查询构造?
    • 因此,如果您只想要前 10 条记录,则执行此循环一次。由于您正在获取前 10 条记录(而不是指定查询),因此如果您删除代码中的循环,您应该没问题。如果您正在执行的查询可能导致表服务仅返回继续令牌,那么您需要维护计数。
    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2023-03-19
    • 2020-12-05
    • 1970-01-01
    • 2019-02-22
    • 2021-09-28
    相关资源
    最近更新 更多