/// <summary> /// Returns an enumerable collection of tables segmented implementation. /// </summary> /// <param name="prefix">The prefix.</param> /// <param name="continuationToken">The continuation token.</param> /// <param name="pagination">The pagination.</param> /// <param name="lastResult">The last result.</param> /// <param name="setResult">The set result.</param> /// <returns>A sequence of tasks to do the operation.</returns> private TaskSequence ListTablesSegmentedImplCore( string prefix, ResultContinuation continuationToken, ResultPagination pagination, ResultSegment <TableServiceTable> lastResult, Action <ResultSegment <string> > setResult) { CommonUtils.AssertContinuationType(continuationToken, ResultContinuation.ContinuationType.Table); InvokeTaskSequenceTask <ResultSegment <TableServiceTable> > listTablesSegmentedTask; if (lastResult == null) { var svc = this.GetDataServiceContext(); var query = from table in svc.CreateQuery <TableServiceTable>(Protocol.Constants.TableServiceTablesName) select table; if (prefix != string.Empty) { // Append Max char to end '{' is 1 + 'z' in AsciiTable string uppperBound = prefix + '{'; query = query.Where((table) => table.TableName.CompareTo(prefix) >= 0 && table.TableName.CompareTo(uppperBound) < 0); } if (pagination.IsPagingEnabled) { query = query.Take(pagination.GetNextRequestPageSize().Value); } var listTablesQuery = query.AsTableServiceQuery(); listTablesSegmentedTask = new InvokeTaskSequenceTask <ResultSegment <TableServiceTable> >( (setResultInner) => listTablesQuery.ExecuteSegmentedImpl(continuationToken, setResultInner)); } else { listTablesSegmentedTask = new InvokeTaskSequenceTask <ResultSegment <TableServiceTable> >(lastResult.GetNextImpl); } yield return(listTablesSegmentedTask); if (GetResultOrDefault <ResultSegment <TableServiceTable> >(listTablesSegmentedTask, out lastResult)) { setResult(new ResultSegment <string>( lastResult.Results.Select((table) => table.TableName), lastResult.HasMoreResults, (setResultInner) => this.ListTablesSegmentedImplCore(prefix, lastResult.ContinuationToken, pagination, lastResult, setResultInner), RetryPolicy) { ContinuationToken = lastResult.ContinuationToken }); } else { setResult(new ResultSegment <string>(new List <string>(), false, null, RetryPolicy)); } }
/// <summary> /// Lists the queues impl core. /// </summary> /// <param name="prefix">The prefix.</param> /// <param name="detailsIncluded">The details included.</param> /// <param name="continuationToken">The continuation token.</param> /// <param name="pagination">The pagination.</param> /// <param name="setResult">The set result.</param> /// <returns>A <see cref="TaskSequence"/> for listing the queues.</returns> private TaskSequence ListQueuesImplCore( string prefix, QueueListingDetails detailsIncluded, ResultContinuation continuationToken, ResultPagination pagination, Action <ResultSegment <CloudQueue> > setResult) { CommonUtils.AssertContinuationType(continuationToken, ResultContinuation.ContinuationType.Queue); ListingContext listingContext = new ListingContext(prefix, pagination.GetNextRequestPageSize()) { Marker = continuationToken != null ? continuationToken.NextMarker : null }; var queueList = new List <CloudQueue>(); var webRequest = QueueRequest.List(this.BaseUri, this.Timeout.RoundUpToSeconds(), listingContext, detailsIncluded); this.Credentials.SignRequest(webRequest); var listTask = webRequest.GetResponseAsyncWithTimeout(this, this.Timeout); yield return(listTask); string nextMarker; using (var response = listTask.Result as HttpWebResponse) { var parsedResponse = QueueResponse.List(response); // Materialize the results so that we can close the response queueList.AddRange(parsedResponse.Queues.Select((Func <QueueEntry, CloudQueue>) this.SelectResponse)); nextMarker = parsedResponse.NextMarker; } ResultContinuation newContinuationToken = new ResultContinuation() { NextMarker = nextMarker, Type = ResultContinuation.ContinuationType.Queue }; ResultSegment.CreateResultSegment( setResult, queueList, newContinuationToken, pagination, this.RetryPolicy, (paginationArg, continuationArg, resultSegment) => this.ListQueuesImplCore(prefix, detailsIncluded, continuationArg, paginationArg, resultSegment)); }