コード例 #1
0
        internal static async Task <Lookup <TKey, TElement> > CreateAsync(IAsyncEnumerable <TElement> source, Func <TElement, TKey> keySelector, IEqualityComparer <TKey>?comparer, CancellationToken cancellationToken)
        {
            var lookup = new Lookup <TKey, TElement>(comparer);

            await foreach (var item in source.WithCancellation(cancellationToken).ConfigureAwait(false))
            {
                var key = keySelector(item);
                lookup.GetOrCreateGrouping(key).Add(item);
            }

            return(lookup);
        }
コード例 #2
0
        internal static async Task <Lookup <TKey, TElement> > CreateAsync <TSource>(IAsyncEnumerable <TSource> source, Func <TSource, TKey> keySelector, Func <TSource, TElement> elementSelector, IEqualityComparer <TKey>?comparer, CancellationToken cancellationToken)
        {
            Debug.Assert(source != null);
            Debug.Assert(keySelector != null);
            Debug.Assert(elementSelector != null);

            var lookup = new Lookup <TKey, TElement>(comparer);

            await foreach (var item in source.WithCancellation(cancellationToken).ConfigureAwait(false))
            {
                var key   = keySelector(item);
                var group = lookup.GetOrCreateGrouping(key);

                var element = elementSelector(item);
                group.Add(element);
            }

            return(lookup);
        }