テーブル内のすべてのエントリを非同期で取得しようとしていますが、継続トークンの操作方法がわかりません。匿名メソッドをデリゲートに変換してから、継続トークンを使用して再帰的に呼び出す必要があると思います。
次のコードを取得して非同期呼び出しを実行し、新しい API ですべてのエントリをフェッチするにはどうすればよいですか?
Task<string[]> GetAllTableEntries(CloudTable tbl, string[] urls, string name, CancellationToken token)
{
TableRequestOptions reqOptions = new TableRequestOptions() { };
OperationContext ctx = new OperationContext() { ClientRequestID = "" };
object state = null;
// Register Cancelation Token
ICancellableAsyncResult result = null;
TableQuery qry = new TableQuery();
TableContinuationToken tok = null;
result = tbl.BeginExecuteQuerySegmented(qry, tok, reqOptions, ctx, (o) =>
{
var response = (o.AsyncState as CloudTable).EndExecuteQuerySegmented(o);
Console.WriteLine("Found " + response.Results.Count + " records");
// The following code was used in the previous version of the SDK
//
//26: // add first segment of data
//27: pageData.CompletedList.AddRange(
//28: from wu in response.Results
//29: select new CompletedWorkUnit(wu));
//30:
//31: // continue fetching segments to complete page
//32: while (response.HasMoreResults)
//33: {
//34: response = response.GetNext();
//35: pageData.CompletedList.AddRange(
//36: from wu in response.Results
//37: select new CompletedWorkUnit(wu));
//38: }
//39:
//40: // set continuation token for next page request
//41: pageData.ContinuationToken = response.ContinuationToken;
//42: evt.Set();
}, state);
// Add cancellation token according to guidance from Table Client 2.0 Breaking Changes blog entry
token.Register((o) => result.Cancel(), state);