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); }
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); }