示例#1
0
        public async ValueTask <bool> MoveNextAsync()
#endif
        {
            if (_queue.IsEmpty())
            {
                return(false);
            }
            if (skipFirst)
            {
                skipFirst = false;
                return(true);
            }

            var first = _queue.Poll();

#if EFCORE2
            if (await first.MoveNext(cancellationToken))
#endif
#if !EFCORE2
            if (await first.MoveNextAsync())
#endif
            {
                _queue.Offer(first);
            }

            if (_queue.IsEmpty())
            {
                return(false);
            }

            _currentEnumerator = _queue.Peek();
            return(true);
        }
示例#2
0
        private void SetOrderEnumerator()
        {
            foreach (var source in _enumerators)
            {
                var orderStreamEnumerator = new OrderStreamMergeAsyncEnumerator <T>(_mergeContext, source);
                if (orderStreamEnumerator.HasElement())
                {
                    orderStreamEnumerator.SkipFirst();
                    _queue.Offer(orderStreamEnumerator);
                }
            }

            _currentEnumerator = _queue.IsEmpty() ? _enumerators.FirstOrDefault() : _queue.Peek();
        }
 public NoPaginationStreamMergeEnumerator(StreamMergeContext <T> mergeContext, IEnumerable <IStreamMergeAsyncEnumerator <T> > sources)
 {
     _mergeContext = mergeContext;
     _skip         = mergeContext.Skip;
     _take         = mergeContext.Take;
     if (_mergeContext.HasGroupQuery())
     {
         _enumerator = new MultiAggregateOrderStreamMergeAsyncEnumerator <T>(_mergeContext, sources);
     }
     else
     {
         _enumerator = new MultiOrderStreamMergeAsyncEnumerator <T>(_mergeContext, sources);
     }
 }
示例#4
0
 public OrderStreamMergeAsyncEnumerator(StreamMergeContext <T> mergeContext, IStreamMergeAsyncEnumerator <T> enumerator)
 {
     _mergeContext = mergeContext;
     _enumerator   = enumerator;
     SetOrderValues();
 }