public static async Task ForEachAsync <TSource>(this IEnumerableAsync <TSource> source, Func <TSource, Task> iterationAction, CancellationToken cancellationToken)
 {
     using (IEnumeratorAsync <TSource> en = source.GetEnumerator())
         while (await en.MoveNextAsync(cancellationToken))
         {
             await iterationAction(en.Current);
         }
 }
Exemple #2
0
        private async Task PrintPackages(ListArgs listArgs, IEnumeratorAsync <IPackageSearchMetadata> asyncEnumerator)
        {
            bool hasPackages = false;

            if (asyncEnumerator != null)
            {
                if (listArgs.IsDetailed)
                {
                    /***********************************************
                    * Package-Name
                    *  1.0.0.2010
                    *  This is the package Description
                    *
                    * Package-Name-Two
                    *  2.0.0.2010
                    *  This is the second package Description
                    ***********************************************/
                    while (await asyncEnumerator.MoveNextAsync())
                    {
                        var p = asyncEnumerator.Current;
                        listArgs.PrintJustified(0, p.Identity.Id);
                        listArgs.PrintJustified(1, p.Identity.Version.ToFullString());
                        listArgs.PrintJustified(1, p.Description);
                        if (!string.IsNullOrEmpty(p.LicenseUrl?.OriginalString))
                        {
                            listArgs.PrintJustified(1,
                                                    string.Format(
                                                        CultureInfo.InvariantCulture,
                                                        listArgs.ListCommandLicenseUrl,
                                                        p.LicenseUrl.OriginalString));
                        }
                        Console.WriteLine();
                        hasPackages = true;
                    }
                }
                else
                {
                    /***********************************************
                    * Package-Name 1.0.0.2010
                    * Package-Name-Two 2.0.0.2010
                    ***********************************************/
                    while (await asyncEnumerator.MoveNextAsync())
                    {
                        var p = asyncEnumerator.Current;
                        listArgs.PrintJustified(0, p.Identity.Id + " " + p.Identity.Version.ToFullString());
                        hasPackages = true;
                    }
                }
            }
            if (!hasPackages)
            {
                Console.WriteLine(listArgs.ListCommandNoPackages);
            }
        }
        public static async Task <List <T> > ToListAsync <T>(this IEnumeratorAsync <T> enumerator, CancellationToken cancellationToken = default(CancellationToken))
        {
            var list = new List <T>();

            while (await enumerator.MoveNextAsync(cancellationToken).ConfigureAwait(false))
            {
                list.Add(enumerator.Current);
            }

            return(list);
        }
        async Task IMultiplexingEnumerableOpen.Open()
        {
            if (Interlocked.CompareExchange(ref isOpen, 1, 0) != 0)
            {
                throw new InvalidOperationException("Can not open twice");
            }
            enumerator = await inner.GetEnumerator();

            awaitedEnumerators = totalEnumerators;
            open.SetResult(1);
        }
Exemple #5
0
 async ValueTask <SearchResultMessage> ISearchingParser.GetNext()
 {
     if (enumerator == null)
     {
         enumerator = await impl.GetEnumerator();
     }
     if (!await enumerator.MoveNext())
     {
         return(new SearchResultMessage());
     }
     return(enumerator.Current);
 }
Exemple #6
0
                public async Task <bool> MoveNextAsync(CancellationToken cancellationToken)
                {
                    if (!_initialized)
                    {
                        _data = await _dataProvider(cancellationToken);

                        _source      = _parserProvider(_data).GetEnumerator();
                        _initialized = true;
                    }

                    return(await _source.MoveNextAsync(cancellationToken));
                }
            public DictionaryAsync(IEnumerableAsync <TElement> enumerable,
                                   Func <TElement, TKey> keySelector,
                                   Func <TElement, TValue> valueSelector,
                                   Func <TKey, TKey, bool> comparison = default(Func <TKey, TKey, bool>))
            {
                this.enumerable        = enumerable;
                this.dictionary        = new Dictionary <TKey, TValue>();
                this.keySelector       = keySelector;
                this.valueSelector     = valueSelector;
                this.tryNextEnumerator = enumerable.GetEnumerator();
                this.dictionaryLock    = new AutoResetEvent(true);

                if (comparison.IsDefaultOrNull())
                {
                    comparison = (key1, key2) => key1.Equals(key2);
                }
                this.comparison = comparison;
            }
Exemple #8
0
 public static IEnumerableAsync <Tuple <T1, T2> > Zip <T1, T2>(this IEnumerableAsync <T1> input1, IEnumerableAsync <T2> input2)
 {
     return(Produce <Tuple <T1, T2> >(async yieldAsync =>
     {
         IEnumeratorAsync <T1> enum1 = NullEnumerator <T1> .Instance;
         IEnumeratorAsync <T2> enum2 = NullEnumerator <T2> .Instance;
         await TryFinallyAsync(
             async() =>
         {
             enum1 = await input1.GetEnumerator();
             enum2 = await input2.GetEnumerator();
             while (AllTrue(await Task.WhenAll(enum1.MoveNext(), enum2.MoveNext())))
             {
                 await yieldAsync.YieldAsync(Tuple.Create(enum1.Current, enum2.Current));
             }
             return 0;
         },
             () => Task.WhenAll(enum1.Dispose(), enum2.Dispose())
             );
     }));
 }
        public static IObservable <T> ToObservable <T>(this IEnumeratorAsync <T> enumeratorAsync)
        {
            var nextItem = Observable.Defer(() => enumeratorAsync.MoveNextAsync().ToObservable());

            return(nextItem.Repeat().TakeUntil(b => !b).Select(b => enumeratorAsync.Current));
        }
        public async Task <bool> MoveNextAsync()
        {
            while (_asyncEnumerators.Count > 0)
            {
                T   currentValue = default(T);
                var hasValue     = false;
                List <IEnumeratorAsync <T> > completedEnums = null;

                if (firstPass)
                {
                    foreach (IEnumeratorAsync <T> enumerator in _asyncEnumerators)
                    {
                        if (!await enumerator.MoveNextAsync())
                        {
                            if (completedEnums == null)
                            {
                                completedEnums = new List <IEnumeratorAsync <T> >();
                            }
                            completedEnums.Add(enumerator);
                        }
                        else
                        {
                            if (!hasValue || _orderingComparer.Compare(currentValue, enumerator.Current) > 0)
                            {
                                hasValue                = true;
                                currentValue            = enumerator.Current;
                                _currentEnumeratorAsync = enumerator;
                            }
                        }
                    }
                    firstPass = false;
                }
                else
                {
                    foreach (IEnumeratorAsync <T> enumerator in _asyncEnumerators)
                    {
                        bool hasNext = true;
                        if (enumerator == _lastAwaitedEnumeratorAsync)
                        {
                            hasNext = await enumerator.MoveNextAsync();

                            if (!hasNext)
                            {
                                if (completedEnums == null)
                                {
                                    completedEnums = new List <IEnumeratorAsync <T> >();
                                }
                                completedEnums.Add(enumerator);
                            }
                        }

                        if (hasNext && (!hasValue || _orderingComparer.Compare(currentValue, enumerator.Current) > 0))
                        {
                            hasValue                = true;
                            currentValue            = enumerator.Current;
                            _currentEnumeratorAsync = enumerator;
                        }
                    }
                }
                _lastAwaitedEnumeratorAsync = _currentEnumeratorAsync;
                //Remove all the enums that don't have a next value
                if (completedEnums != null)
                {
                    _asyncEnumerators.RemoveAll(obj => completedEnums.Contains(obj));
                }

                if (hasValue)
                {
                    if (_seen.Add(currentValue))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemple #11
0
        private static async Task <TResult> SelectOptionalAsync <TItem, TSelect, TCarry, TResult>(IEnumeratorAsync <TItem> enumerable,
                                                                                                  TCarry carry, IEnumerableAsync <TSelect> selecteds, Func <TSelect, Task> selectSelection,
                                                                                                  Func <TItem, TCarry, Func <TSelect, TCarry, Task <TResult> >, Func <TCarry, Task <TResult> >, Task <TResult> > selection,
                                                                                                  Func <IEnumerableAsync <TSelect>, TCarry, TResult> aggregation)
        {
            if (!await enumerable.MoveNextAsync())
            {
                return(aggregation(selecteds, carry));
            }

            return(await selection(enumerable.Current, carry,
                                   async (selected, carryUpdated) =>
            {
                await selectSelection(selected);
                return await SelectOptionalAsync(enumerable, carryUpdated, selecteds, selectSelection,
                                                 selection,
                                                 aggregation);
            },
                                   async (carryUpdated) =>
            {
                return await SelectOptionalAsync(enumerable, carryUpdated, selecteds, selectSelection,
                                                 selection,
                                                 aggregation);
            }));
        }
 public WhereEnumerator(IEnumeratorAsync <TSource> source, Func <TSource, bool> predicate)
 {
     _source    = source;
     _predicate = predicate;
 }
 public FuncEnumerator(IEnumeratorAsync <TSource> source, Func <TSource, TResult> func)
 {
     _source = source;
     _func   = func;
 }
 public static async Task <T> FirstOrDefaultAsync <T>(this IEnumerableAsync <T> source, CancellationToken cancellationToken)
 {
     using (IEnumeratorAsync <T> en = source.GetEnumerator())
         return(await en.MoveNextAsync(cancellationToken) ? en.Current : default(T));
 }