浏览代码

Use C# 8.0 in SequenceEqual.

Bart De Smet 6 年之前
父节点
当前提交
d4eea91c4f
共有 1 个文件被更改,包括 18 次插入0 次删除
  1. 18 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs

+ 18 - 0
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs

@@ -64,6 +64,23 @@ namespace System.Linq
 
             async Task<bool> Core(IAsyncEnumerable<TSource> _first, IAsyncEnumerable<TSource> _second, IEqualityComparer<TSource> _comparer, CancellationToken _cancellationToken)
             {
+#if CSHARP8
+                await using (var e1 = _first.GetAsyncEnumerator(_cancellationToken).ConfigureAwait(false))
+                {
+                    await using (var e2 = _second.GetAsyncEnumerator(_cancellationToken).ConfigureAwait(false))
+                    {
+                        while (await e1.MoveNextAsync())
+                        {
+                            if (!(await e2.MoveNextAsync() && _comparer.Equals(e1.Current, e2.Current)))
+                            {
+                                return false;
+                            }
+                        }
+
+                        return !await e2.MoveNextAsync();
+                    }
+                }
+#else
                 var e1 = _first.GetAsyncEnumerator(_cancellationToken);
 
                 try
@@ -91,6 +108,7 @@ namespace System.Linq
                 {
                     await e1.DisposeAsync().ConfigureAwait(false);
                 }
+#endif
             }
         }
     }