public async ValueTask <bool> MoveNextAsync()
            {
                _prev?.Dispose(); // dispose the previous instance

                var isProjectInto = _query?.IsProjectInto ?? false;

                while (true)
                {
                    var next = _enumerator.MoveNextAsync();
                    if (next.IsCompleted)
                    {
                        if (next.Result == false)
                        {
                            return(false);
                        }
                    }
                    else if (await next.AsTask().WithCancellation(_token).ConfigureAwait(false) == false)
                    {
                        return(false);
                    }

                    _prev = _enumerator.Current;

                    _query?.InvokeAfterStreamExecuted(_enumerator.Current);

                    Current = CreateStreamResult(_enumerator.Current, isProjectInto);
                    return(true);
                }
            }
            internal override StreamResult <T> ResultCreator(StreamOperation.YieldStreamResults asyncEnumerator)
            {
                var current = asyncEnumerator.Current;

                _query?.InvokeAfterStreamExecuted(current);
                return(_parent.CreateStreamResult <T>(current, _fieldsToFetch, _query?.IsProjectInto ?? false));
            }
 internal override TimeSeriesStreamResult <T> ResultCreator(StreamOperation.YieldStreamResults asyncEnumerator)
 {
     _query?.InvokeAfterStreamExecuted(asyncEnumerator.Current);
     return(_parent.CreateTimeSeriesStreamResult <T>(asyncEnumerator));
 }