Ejemplo n.º 1
0
        public override async Task <ResponseMessage> ReadNextAsync(ITrace trace, CancellationToken cancellationToken)
        {
            if (trace == null)
            {
                throw new ArgumentNullException(nameof(trace));
            }

            // If Correlated Id already exists and is different, add a new one in comma separated list
            // Scenario: A new iterator is created with same ContinuationToken and Trace
            if (trace.Data.TryGetValue(QueryIterator.CorrelatedActivityIdKeyName, out object correlatedActivityIds))
            {
                List <string> correlatedIdList = correlatedActivityIds.ToString().Split(',').ToList();
                if (!correlatedIdList.Contains(this.correlatedActivityId.ToString()))
                {
                    correlatedIdList.Add(this.correlatedActivityId.ToString());
                    trace.AddOrUpdateDatum(QueryIterator.CorrelatedActivityIdKeyName,
                                           string.Join(",", correlatedIdList));
                }
            }
            else
            {
                trace.AddDatum(QueryIterator.CorrelatedActivityIdKeyName, this.correlatedActivityId.ToString());
            }

            TryCatch <QueryPage> tryGetQueryPage;

            try
            {
                // This catches exception thrown by the pipeline and converts it to QueryResponse
                this.queryPipelineStage.SetCancellationToken(cancellationToken);
                if (!await this.queryPipelineStage.MoveNextAsync(trace))
                {
                    this.hasMoreResults = false;
                    return(QueryResponse.CreateSuccess(
                               result: EmptyPage,
                               count: EmptyPage.Count,
                               responseLengthBytes: default,