私は .NET ストレージ クライアント (2012 年 6 月) を使用しており、次のようなクエリがあります。
(from e in tableContext.CreateQuery<Entity>(tableName)
select e).AsTableServiceQuery();
CloudTableQuery
これはタイプを返し、次のように文書化されています。
「型のクエリを継続トークンを処理
DataServiceQuery
するCloudTableQuery
オブジェクトに変換し、テーブル サービスへの失敗した呼び出しを再試行します。」</p>
私は CloudTableQuery を作成して、テーブル サービスの応答で "内部的に" ページネーションを処理できるようにしようとしました。Execute()
メソッドはまさにこれを行い、さらに結果がある場合は継続トークンを処理します。
一方、同じ操作 ( BeginExecuteSegmented
/EndExecuteSegmented
ペア) に非同期メソッドを使用しようとすると、両方のオーバーロードがBeginExecuteSegmented
ページネーションを内部的に処理しないことがわかりました (AsTableServiceQuery()
ドキュメントで宣伝されているように)。
したがって、次のスニペットを書きました。
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()
ありがとう。