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,