public override async Task <FeedResponse <CosmosElement> > DrainAsync(int maxElements, CancellationToken token)
        {
            FeedResponse <CosmosElement> sourcePage = await base.DrainAsync(maxElements, token);

            // skip the documents but keep all the other headers
            List <CosmosElement>         documentsAfterSkip = sourcePage.Skip(this.skipCount).ToList();
            FeedResponse <CosmosElement> offsetPage         = new FeedResponse <CosmosElement>(
                documentsAfterSkip,
                documentsAfterSkip.Count(),
                sourcePage.Headers,
                sourcePage.UseETagAsContinuation,
                sourcePage.QueryMetrics,
                sourcePage.RequestStatistics,
                sourcePage.DisallowContinuationTokenMessage,
                sourcePage.ResponseLengthBytes);

            int numberOfDocumentsSkipped = sourcePage.Count - documentsAfterSkip.Count;

            this.skipCount -= numberOfDocumentsSkipped;

            if (sourcePage.DisallowContinuationTokenMessage == null)
            {
                if (!this.IsDone)
                {
                    string sourceContinuation = sourcePage.ResponseContinuation;
                    offsetPage.ResponseContinuation = new OffsetContinuationToken(
                        this.skipCount,
                        sourceContinuation).ToString();
                }
                else
                {
                    offsetPage.ResponseContinuation = null;
                }
            }

            return(offsetPage);
        }