private async Task <Position> ReadEventsInternalAsync(IEventStoreConnection connection, bool resolveLinkTos,
                                                              UserCredentials userCredentials, long?lastCommitPosition)
        {
            _checkpointIntervalCurrent = 0;

            bool           shouldStopOrDone;
            AllEventsSlice slice;

            do
            {
                slice = await connection
                        .FilteredReadAllEventsForwardAsync(_nextReadPosition, ReadBatchSize, resolveLinkTos, _filter,
                                                           _maxSearchWindow, userCredentials)
                        .ConfigureAwait(false);

                shouldStopOrDone = await ReadEventsCallbackAsync(slice, lastCommitPosition).ConfigureAwait(false);
            } while (!shouldStopOrDone);

            return(slice.NextPosition);
        }