Azure表查询异步 - 始终返回延续令牌

时间:2014-10-08 13:13:50

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

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

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 Storage 4.3.0.0

1 个答案:

答案 0 :(得分:1)

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