| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 
							- // Licensed to the .NET Foundation under one or more agreements.
 
- // The .NET Foundation licenses this file to you under the Apache 2.0 License.
 
- // See the LICENSE file in the project root for more information. 
 
- using System.Collections.Generic;
 
- using System.Threading;
 
- using System.Threading.Tasks;
 
- namespace System.Linq
 
- {
 
-     public static partial class AsyncEnumerable
 
-     {
 
-         public static Task<bool> SequenceEqual<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
 
-         {
 
-             if (first == null)
 
-                 throw new ArgumentNullException(nameof(first));
 
-             if (second == null)
 
-                 throw new ArgumentNullException(nameof(second));
 
-             if (comparer == null)
 
-                 throw new ArgumentNullException(nameof(comparer));
 
-             return SequenceEqual(first, second, comparer, CancellationToken.None);
 
-         }
 
-         public static Task<bool> SequenceEqual<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second)
 
-         {
 
-             if (first == null)
 
-                 throw new ArgumentNullException(nameof(first));
 
-             if (second == null)
 
-                 throw new ArgumentNullException(nameof(second));
 
-             return SequenceEqual(first, second, CancellationToken.None);
 
-         }
 
-         public static Task<bool> SequenceEqual<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer, CancellationToken cancellationToken)
 
-         {
 
-             if (first == null)
 
-                 throw new ArgumentNullException(nameof(first));
 
-             if (second == null)
 
-                 throw new ArgumentNullException(nameof(second));
 
-             if (comparer == null)
 
-                 throw new ArgumentNullException(nameof(comparer));
 
-             return SequenceEqual_(first, second, comparer, cancellationToken);
 
-         }
 
-         public static Task<bool> SequenceEqual<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, CancellationToken cancellationToken)
 
-         {
 
-             if (first == null)
 
-                 throw new ArgumentNullException(nameof(first));
 
-             if (second == null)
 
-                 throw new ArgumentNullException(nameof(second));
 
-             return first.SequenceEqual(second, EqualityComparer<TSource>.Default, cancellationToken);
 
-         }
 
-         private static async Task<bool> SequenceEqual_<TSource>(IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer, CancellationToken cancellationToken)
 
-         {
 
-             if (first is ICollection<TSource> firstCol && second is ICollection<TSource> secondCol && firstCol.Count != secondCol.Count)
 
-             {
 
-                 return false;
 
-             }
 
-             var e1 = first.GetAsyncEnumerator();
 
-             try
 
-             {
 
-                 var e2 = second.GetAsyncEnumerator();
 
-                 try
 
-                 {
 
-                     while (await e1.MoveNextAsync().ConfigureAwait(false))
 
-                     {
 
-                         if (!(await e2.MoveNextAsync().ConfigureAwait(false) && comparer.Equals(e1.Current, e2.Current)))
 
-                         {
 
-                             return false;
 
-                         }
 
-                     }
 
-                     return !await e2.MoveNextAsync().ConfigureAwait(false);
 
-                 }
 
-                 finally
 
-                 {
 
-                     await e2.DisposeAsync().ConfigureAwait(false);
 
-                 }
 
-             }
 
-             finally
 
-             {
 
-                 await e1.DisposeAsync().ConfigureAwait(false);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |