예제 #1
0
파일: Lookup.cs 프로젝트: zyj0021/reactive
        internal static async Task <Lookup <TKey, TElement> > CreateForJoinAsync(IAsyncEnumerable <TElement> source, Func <TElement, TKey> keySelector, IEqualityComparer <TKey> comparer, CancellationToken cancellationToken)
        {
            var lookup = new Lookup <TKey, TElement>(comparer);

            await foreach (var item in AsyncEnumerableExtensions.WithCancellation(source, cancellationToken).ConfigureAwait(false))
            {
                var key = keySelector(item);
                if (key != null)
                {
                    lookup.GetGrouping(key, create: true).Add(item);
                }
            }

            return(lookup);
        }
예제 #2
0
파일: Lookup.cs 프로젝트: zyj0021/reactive
        internal static async Task <LookupWithTask <TKey, TElement> > CreateAsync(IAsyncEnumerable <TElement> source, Func <TElement, CancellationToken, ValueTask <TKey> > keySelector, IEqualityComparer <TKey> comparer, CancellationToken cancellationToken)
        {
            Debug.Assert(source != null);
            Debug.Assert(keySelector != null);

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

            await foreach (var item in AsyncEnumerableExtensions.WithCancellation(source, cancellationToken).ConfigureAwait(false))
            {
                var key = await keySelector(item, cancellationToken).ConfigureAwait(false);

                lookup.GetGrouping(key, create: true).Add(item);
            }

            return(lookup);
        }