我正在使用 .NET 存储客户端(2012 年 6 月),我有如下查询
(from e in tableContext.CreateQuery<Entity>(tableName)
select e).AsTableServiceQuery();
这将返回CloudTableQuery
类型,并记录为:
“将类型查询转换为处理延续令牌并重试失败的对表服务的调用
DataServiceQuery
的对象。”</p>CloudTableQuery
我试图让 CloudTableQuery 为我在表服务响应中“内部”处理分页。Execute()
方法正是这样做的,如果有更多结果,则处理继续标记。
另一方面,当我尝试对同一操作(BeginExecuteSegmented
/EndExecuteSegmented
对)使用异步方法时,我观察到 的两个重载BeginExecuteSegmented
都不能在内部处理分页(如AsTableServiceQuery()
docs 中所宣传的那样)。
因此编写了以下代码段:
while (true){
var ar = continuationToken == null ?
entities.BeginExecuteSegmented(null, null)
: entities.BeginExecuteSegmented(continuationToken, null, null);
var task = Task.Factory.FromAsync(ar, r => entities.EndExecuteSegmented(r));
var resultSegment = await task;
results.AddRange(resultSegment.Results);
if (resultSegment.HasMoreResults)
{
continuationToken = resultSegment.ContinuationToken;
}
else { break; }
}
这成功地处理了分页,但我试图理解为什么不像同步等效那样在内部处理Begin/EndExecuteSegmented
分页。CloudTableQuery
Execute()
谢谢。