浏览代码

Use await using which now can bind to configured tasks.

Bart De Smet 6 年之前
父节点
当前提交
0171e2bad0
共有 29 个文件被更改,包括 178 次插入1236 次删除
  1. 3 15
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Amb.cs
  2. 4 28
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Catch.cs
  3. 4 28
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/DistinctUntilChanged.cs
  4. 3 21
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Do.cs
  5. 1 7
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/IsEmpty.cs
  6. 1 7
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Max.cs
  7. 1 7
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Min.cs
  8. 3 21
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/MinBy.cs
  9. 3 21
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Scan.cs
  10. 1 7
      Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerableHelpers.cs
  11. 3 21
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Aggregate.cs
  12. 1 7
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Any.cs
  13. 40 280
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.cs
  14. 8 56
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.tt
  15. 4 28
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/FirstOrDefault.cs
  16. 3 21
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupJoin.cs
  17. 3 21
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Join.cs
  18. 8 56
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Max.cs
  19. 8 56
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Min.cs
  20. 46 318
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.cs
  21. 4 28
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.tt
  22. 2 14
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderedAsyncEnumerable.cs
  23. 2 14
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs
  24. 4 28
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Single.cs
  25. 4 28
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SingleOrDefault.cs
  26. 1 7
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipLast.cs
  27. 6 42
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipWhile.cs
  28. 1 7
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeLast.cs
  29. 6 42
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Zip.cs

+ 3 - 15
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Amb.cs

@@ -95,7 +95,7 @@ namespace System.Linq
 
                 try
                 {
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (winner.ConfigureAwait(false))
                     {
                         if (!await moveNextWinner.ConfigureAwait(false))
                         {
@@ -109,10 +109,6 @@ namespace System.Linq
                             yield return winner.Current;
                         }
                     }
-                    finally
-                    {
-                        await winner.DisposeAsync().ConfigureAwait(false);
-                    }
                 }
                 finally
                 {
@@ -208,7 +204,7 @@ namespace System.Linq
 
                 try
                 {
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (winner.ConfigureAwait(false))
                     {
                         if (!await moveNextWinner.ConfigureAwait(false))
                         {
@@ -222,10 +218,6 @@ namespace System.Linq
                             yield return winner.Current;
                         }
                     }
-                    finally
-                    {
-                        await winner.DisposeAsync().ConfigureAwait(false);
-                    }
                 }
                 finally
                 {
@@ -254,17 +246,13 @@ namespace System.Linq
         {
             if (enumerator != null)
             {
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (enumerator.ConfigureAwait(false))
                 {
                     if (moveNextAsync != null)
                     {
                         await moveNextAsync.ConfigureAwait(false);
                     }
                 }
-                finally
-                {
-                    await enumerator.DisposeAsync().ConfigureAwait(false);
-                }
             }
         }
 #endif

+ 4 - 28
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Catch.cs

@@ -39,9 +39,7 @@ namespace System.Linq
 
                 var err = default(IAsyncEnumerable<TSource>);
 
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (true)
                     {
@@ -63,10 +61,6 @@ namespace System.Linq
                         yield return c;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 if (err != null)
                 {
@@ -103,9 +97,7 @@ namespace System.Linq
 
                 var err = default(IAsyncEnumerable<TSource>);
 
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (true)
                     {
@@ -127,10 +119,6 @@ namespace System.Linq
                         yield return c;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 if (err != null)
                 {
@@ -168,9 +156,7 @@ namespace System.Linq
 
                 var err = default(IAsyncEnumerable<TSource>);
 
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (true)
                     {
@@ -192,10 +178,6 @@ namespace System.Linq
                         yield return c;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 if (err != null)
                 {
@@ -248,9 +230,7 @@ namespace System.Linq
 
                 foreach (var source in sources)
                 {
-                    var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                     {
                         error = null;
 
@@ -277,10 +257,6 @@ namespace System.Linq
                         if (error == null)
                             break;
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
                 }
 
                 error?.Throw();

+ 4 - 28
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/DistinctUntilChanged.cs

@@ -103,9 +103,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -128,10 +126,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DistinctUntilChangedAsyncIterator<TSource>(source, comparer);
@@ -150,9 +144,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -179,10 +171,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DistinctUntilChangedAsyncIterator<TSource, TKey>(source, keySelector, comparer);
@@ -201,9 +189,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -230,10 +216,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DistinctUntilChangedAsyncIteratorWithTask<TSource, TKey>(source, keySelector, comparer);
@@ -253,9 +235,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -282,10 +262,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DistinctUntilChangedAsyncIteratorWithTaskAndCancellation<TSource, TKey>(source, keySelector, comparer);

+ 3 - 21
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Do.cs

@@ -176,9 +176,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (true)
                     {
@@ -210,10 +208,6 @@ namespace System.Linq
 
                     onCompleted?.Invoke();
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DoAsyncIterator<TSource>(source, onNext, onError, onCompleted);
@@ -227,9 +221,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (true)
                     {
@@ -264,10 +256,6 @@ namespace System.Linq
                         await onCompleted().ConfigureAwait(false);
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DoAsyncIteratorWithTask<TSource>(source, onNext, onError, onCompleted);
@@ -282,9 +270,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (true)
                     {
@@ -319,10 +305,6 @@ namespace System.Linq
                         await onCompleted(cancellationToken).ConfigureAwait(false);
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new DoAsyncIteratorWithTaskAndCancellation<TSource>(source, onNext, onError, onCompleted);

+ 1 - 7
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/IsEmpty.cs

@@ -19,16 +19,10 @@ namespace System.Linq
 
             static async ValueTask<bool> Core(IAsyncEnumerable<TSource> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     return !await e.MoveNextAsync();
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
     }

+ 1 - 7
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Max.cs

@@ -24,9 +24,7 @@ namespace System.Linq
                     _comparer = Comparer<TSource>.Default;
                 }
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                         throw Error.NoElements();
@@ -45,10 +43,6 @@ namespace System.Linq
 
                     return max;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
     }

+ 1 - 7
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Min.cs

@@ -24,9 +24,7 @@ namespace System.Linq
                     _comparer = Comparer<TSource>.Default;
                 }
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                         throw Error.NoElements();
@@ -45,10 +43,6 @@ namespace System.Linq
 
                     return min;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
     }

+ 3 - 21
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/MinBy.cs

@@ -110,9 +110,7 @@ namespace System.Linq
         {
             var result = new List<TSource>();
 
-            var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 if (!await e.MoveNextAsync())
                     throw Error.NoElements();
@@ -139,10 +137,6 @@ namespace System.Linq
                     }
                 }
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
 
             return result;
         }
@@ -151,9 +145,7 @@ namespace System.Linq
         {
             var result = new List<TSource>();
 
-            var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 if (!await e.MoveNextAsync())
                     throw Error.NoElements();
@@ -180,10 +172,6 @@ namespace System.Linq
                     }
                 }
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
 
             return result;
         }
@@ -193,9 +181,7 @@ namespace System.Linq
         {
             var result = new List<TSource>();
 
-            var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 if (!await e.MoveNextAsync())
                     throw Error.NoElements();
@@ -222,10 +208,6 @@ namespace System.Linq
                     }
                 }
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
 
             return result;
         }

+ 3 - 21
Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Scan.cs

@@ -27,9 +27,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -45,10 +43,6 @@ namespace System.Linq
                         yield return res;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new ScanAsyncEnumerable<TSource>(source, accumulator);
@@ -93,9 +87,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -111,10 +103,6 @@ namespace System.Linq
                         yield return res;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new ScanAsyncEnumerableWithTask<TSource>(source, accumulator);
@@ -134,9 +122,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -152,10 +138,6 @@ namespace System.Linq
                         yield return res;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new ScanAsyncEnumerableWithTaskAndCancellation<TSource>(source, accumulator);

+ 1 - 7
Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerableHelpers.cs

@@ -44,9 +44,7 @@ namespace System.Collections.Generic
             }
             else
             {
-                var en = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var en = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await en.MoveNextAsync())
                     {
@@ -93,10 +91,6 @@ namespace System.Collections.Generic
                         return result;
                     }
                 }
-                finally
-                {
-                    await en.DisposeAsync();
-                }
             }
 
             result.Length = 0;

+ 3 - 21
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Aggregate.cs

@@ -21,9 +21,7 @@ namespace System.Linq
 
             static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, TSource, TSource> _accumulator, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -39,10 +37,6 @@ namespace System.Linq
 
                     return acc;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -57,9 +51,7 @@ namespace System.Linq
 
             static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, TSource, ValueTask<TSource>> _accumulator, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -75,10 +67,6 @@ namespace System.Linq
 
                     return acc;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -94,9 +82,7 @@ namespace System.Linq
 
             static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, TSource, CancellationToken, ValueTask<TSource>> _accumulator, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -112,10 +98,6 @@ namespace System.Linq
 
                     return acc;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 #endif

+ 1 - 7
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Any.cs

@@ -19,16 +19,10 @@ namespace System.Linq
 
             static async ValueTask<bool> Core(IAsyncEnumerable<TSource> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     return await e.MoveNextAsync();
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 

+ 40 - 280
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.cs

@@ -19,9 +19,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<int> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -41,10 +39,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -59,9 +53,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, int> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -81,10 +73,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -99,9 +87,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<int>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -121,10 +107,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -140,9 +122,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<int>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -162,10 +142,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 #endif
@@ -179,9 +155,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<long> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -201,10 +175,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -219,9 +189,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, long> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -241,10 +209,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -259,9 +223,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<long>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -281,10 +243,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -300,9 +258,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<long>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -322,10 +278,6 @@ namespace System.Linq
 
                     return (double)sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 #endif
@@ -339,9 +291,7 @@ namespace System.Linq
 
             static async ValueTask<float> Core(IAsyncEnumerable<float> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -361,10 +311,6 @@ namespace System.Linq
 
                     return (float)(sum / count);
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -379,9 +325,7 @@ namespace System.Linq
 
             static async ValueTask<float> Core(IAsyncEnumerable<TSource> _source, Func<TSource, float> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -401,10 +345,6 @@ namespace System.Linq
 
                     return (float)(sum / count);
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -419,9 +359,7 @@ namespace System.Linq
 
             static async ValueTask<float> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<float>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -441,10 +379,6 @@ namespace System.Linq
 
                     return (float)(sum / count);
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -460,9 +394,7 @@ namespace System.Linq
 
             static async ValueTask<float> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<float>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -482,10 +414,6 @@ namespace System.Linq
 
                     return (float)(sum / count);
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 #endif
@@ -499,9 +427,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<double> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -521,10 +447,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -539,9 +461,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, double> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -561,10 +481,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -579,9 +495,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<double>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -601,10 +515,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -620,9 +530,7 @@ namespace System.Linq
 
             static async ValueTask<double> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<double>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -642,10 +550,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 #endif
@@ -659,9 +563,7 @@ namespace System.Linq
 
             static async ValueTask<decimal> Core(IAsyncEnumerable<decimal> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -681,10 +583,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -699,9 +597,7 @@ namespace System.Linq
 
             static async ValueTask<decimal> Core(IAsyncEnumerable<TSource> _source, Func<TSource, decimal> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -721,10 +617,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -739,9 +631,7 @@ namespace System.Linq
 
             static async ValueTask<decimal> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<decimal>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -761,10 +651,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -780,9 +666,7 @@ namespace System.Linq
 
             static async ValueTask<decimal> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<decimal>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -802,10 +686,6 @@ namespace System.Linq
 
                     return sum / count;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 #endif
@@ -819,9 +699,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<int?> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -847,10 +725,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -867,9 +741,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, int?> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -895,10 +767,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -915,9 +783,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<int?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -943,10 +809,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -964,9 +826,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<int?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -992,10 +852,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1011,9 +867,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<long?> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1039,10 +893,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1059,9 +909,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, long?> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1087,10 +935,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1107,9 +951,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<long?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1135,10 +977,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1156,9 +994,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<long?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1184,10 +1020,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1203,9 +1035,7 @@ namespace System.Linq
 
             static async ValueTask<float?> Core(IAsyncEnumerable<float?> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1231,10 +1061,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1251,9 +1077,7 @@ namespace System.Linq
 
             static async ValueTask<float?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, float?> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1279,10 +1103,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1299,9 +1119,7 @@ namespace System.Linq
 
             static async ValueTask<float?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<float?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1327,10 +1145,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1348,9 +1162,7 @@ namespace System.Linq
 
             static async ValueTask<float?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<float?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1376,10 +1188,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1395,9 +1203,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<double?> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1423,10 +1229,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1443,9 +1245,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, double?> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1471,10 +1271,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1491,9 +1287,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<double?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1519,10 +1313,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1540,9 +1330,7 @@ namespace System.Linq
 
             static async ValueTask<double?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<double?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1568,10 +1356,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1587,9 +1371,7 @@ namespace System.Linq
 
             static async ValueTask<decimal?> Core(IAsyncEnumerable<decimal?> _source, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1615,10 +1397,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1635,9 +1413,7 @@ namespace System.Linq
 
             static async ValueTask<decimal?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, decimal?> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1663,10 +1439,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1683,9 +1455,7 @@ namespace System.Linq
 
             static async ValueTask<decimal?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<decimal?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1711,10 +1481,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }
@@ -1732,9 +1498,7 @@ namespace System.Linq
 
             static async ValueTask<decimal?> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<decimal?>> _selector, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -1760,10 +1524,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
             }

+ 8 - 56
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.tt

@@ -58,9 +58,7 @@ foreach (var o in os)
 if (isNullable)
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -86,10 +84,6 @@ if (isNullable)
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
 <#
@@ -97,9 +91,7 @@ if (isNullable)
 else
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -119,10 +111,6 @@ else
 
                     return <#=res#>;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 <#
 }
 #>
@@ -144,9 +132,7 @@ else
 if (isNullable)
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -172,10 +158,6 @@ if (isNullable)
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
 <#
@@ -183,9 +165,7 @@ if (isNullable)
 else
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -205,10 +185,6 @@ else
 
                     return <#=res#>;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 <#
 }
 #>
@@ -230,9 +206,7 @@ else
 if (isNullable)
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -258,10 +232,6 @@ if (isNullable)
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
 <#
@@ -269,9 +239,7 @@ if (isNullable)
 else
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -291,10 +259,6 @@ else
 
                     return <#=res#>;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 <#
 }
 #>
@@ -317,9 +281,7 @@ else
 if (isNullable)
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -345,10 +307,6 @@ if (isNullable)
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return null;
 <#
@@ -356,9 +314,7 @@ if (isNullable)
 else
 {
 #>
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -378,10 +334,6 @@ else
 
                     return <#=res#>;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 <#
 }
 #>

+ 4 - 28
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/FirstOrDefault.cs

@@ -97,19 +97,13 @@ namespace System.Linq
 
                 static async ValueTask<Maybe<TSource>> Core(IAsyncEnumerable<TSource> _source, CancellationToken _cancellationToken)
                 {
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (await e.MoveNextAsync())
                         {
                             return new Maybe<TSource>(e.Current);
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return new Maybe<TSource>();
                 }
@@ -120,9 +114,7 @@ namespace System.Linq
 
         private static async ValueTask<Maybe<TSource>> TryGetFirst<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
         {
-            var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 while (await e.MoveNextAsync())
                 {
@@ -134,19 +126,13 @@ namespace System.Linq
                     }
                 }
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
 
             return new Maybe<TSource>();
         }
 
         private static async ValueTask<Maybe<TSource>> TryGetFirst<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<bool>> predicate, CancellationToken cancellationToken)
         {
-            var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 while (await e.MoveNextAsync())
                 {
@@ -158,10 +144,6 @@ namespace System.Linq
                     }
                 }
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
 
             return new Maybe<TSource>();
         }
@@ -169,9 +151,7 @@ namespace System.Linq
 #if !NO_DEEP_CANCELLATION
         private static async ValueTask<Maybe<TSource>> TryGetFirst<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<bool>> predicate, CancellationToken cancellationToken)
         {
-            var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 while (await e.MoveNextAsync())
                 {
@@ -183,10 +163,6 @@ namespace System.Linq
                     }
                 }
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
 
             return new Maybe<TSource>();
         }

+ 3 - 21
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupJoin.cs

@@ -31,9 +31,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await e.MoveNextAsync())
                     {
@@ -48,10 +46,6 @@ namespace System.Linq
                         while (await e.MoveNextAsync());
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new GroupJoinAsyncEnumerable<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
@@ -79,9 +73,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await e.MoveNextAsync())
                     {
@@ -96,10 +88,6 @@ namespace System.Linq
                         while (await e.MoveNextAsync());
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new GroupJoinAsyncEnumerableWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
@@ -128,9 +116,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await e.MoveNextAsync())
                     {
@@ -145,10 +131,6 @@ namespace System.Linq
                         while (await e.MoveNextAsync());
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new GroupJoinAsyncEnumerableWithTaskAndCancellation<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);

+ 3 - 21
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Join.cs

@@ -32,9 +32,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await e.MoveNextAsync())
                     {
@@ -65,10 +63,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new JoinAsyncIterator<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
@@ -96,9 +90,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await e.MoveNextAsync())
                     {
@@ -129,10 +121,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new JoinAsyncIteratorWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
@@ -161,9 +149,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = outer.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (await e.MoveNextAsync())
                     {
@@ -194,10 +180,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new JoinAsyncIteratorWithTaskAndCancellation<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);

+ 8 - 56
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Max.cs

@@ -25,9 +25,7 @@ namespace System.Linq
 
                     var value = default(TSource);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -50,10 +48,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -68,9 +62,7 @@ namespace System.Linq
 
                     var value = default(TSource);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -88,10 +80,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -115,9 +103,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -140,10 +126,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -158,9 +140,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -178,10 +158,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -205,9 +181,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -230,10 +204,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -248,9 +218,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -269,10 +237,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -297,9 +261,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -322,10 +284,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -340,9 +298,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -361,10 +317,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }

+ 8 - 56
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Min.cs

@@ -25,9 +25,7 @@ namespace System.Linq
 
                     var value = default(TSource);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -50,10 +48,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -68,9 +62,7 @@ namespace System.Linq
 
                     var value = default(TSource);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -89,10 +81,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -116,9 +104,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -141,10 +127,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -159,9 +141,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -180,10 +160,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -207,9 +183,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -232,10 +206,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -250,9 +220,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -271,10 +239,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -299,9 +263,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         do
                         {
@@ -324,10 +286,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }
@@ -342,9 +300,7 @@ namespace System.Linq
 
                     var value = default(TResult);
 
-                    var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         if (!await e.MoveNextAsync())
                         {
@@ -361,10 +317,6 @@ namespace System.Linq
                             }
                         }
                     }
-                    finally
-                    {
-                        await e.DisposeAsync();
-                    }
 
                     return value;
                 }

文件差异内容过多而无法显示
+ 46 - 318
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.cs


+ 4 - 28
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.tt

@@ -43,9 +43,7 @@ foreach (var m in new[] { "Max", "Min" })
 #>
                 <#=t#> value;
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -108,10 +106,6 @@ foreach (var m in new[] { "Max", "Min" })
 #>
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return value;
 <#
@@ -121,9 +115,7 @@ foreach (var m in new[] { "Max", "Min" })
 #>
                 <#=t#> value = null;
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     // Start off knowing that we've a non-null value (or exit here, knowing we don't)
                     // so we don't have to keep testing for nullity.
@@ -277,10 +269,6 @@ foreach (var m in new[] { "Max", "Min" })
             }
 #>
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return value;
 <#
@@ -322,9 +310,7 @@ foreach (var overload in new[] {
 #>
                 <#=t#> value;
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -387,10 +373,6 @@ foreach (var overload in new[] {
 #>
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return value;
 <#
@@ -400,9 +382,7 @@ foreach (var overload in new[] {
 #>
                 <#=t#> value = null;
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // REVIEW: Can use `await using` if we get pattern bind (HAS_AWAIT_USING_PATTERN_BIND)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     // Start off knowing that we've a non-null value (or exit here, knowing we don't)
                     // so we don't have to keep testing for nullity.
@@ -556,10 +536,6 @@ foreach (var overload in new[] {
             }
 #>
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return value;
 <#

+ 2 - 14
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderedAsyncEnumerable.cs

@@ -264,9 +264,7 @@ namespace System.Linq
 
         public async ValueTask<Maybe<TElement>> TryGetFirstAsync(CancellationToken cancellationToken)
         {
-            var e = _source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = _source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 if (!await e.MoveNextAsync())
                 {
@@ -291,17 +289,11 @@ namespace System.Linq
 
                 return new Maybe<TElement>(value);
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
         }
 
         public async ValueTask<Maybe<TElement>> TryGetLastAsync(CancellationToken cancellationToken)
         {
-            var e = _source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-            try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+            await using (var e = _source.GetConfiguredAsyncEnumerator(cancellationToken, false))
             {
                 if (!await e.MoveNextAsync())
                 {
@@ -326,10 +318,6 @@ namespace System.Linq
 
                 return new Maybe<TElement>(value);
             }
-            finally
-            {
-                await e.DisposeAsync();
-            }
         }
 
         internal async ValueTask<Maybe<TElement>> TryGetLastAsync(int minIndexInclusive, int maxIndexInclusive, CancellationToken cancellationToken)

+ 2 - 14
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs

@@ -52,13 +52,9 @@ namespace System.Linq
 
             static async ValueTask<bool> Core(IAsyncEnumerable<TSource> _first, IAsyncEnumerable<TSource> _second, IEqualityComparer<TSource> _comparer, CancellationToken _cancellationToken)
             {
-                var e1 = _first.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e1 = _first.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
-                    var e2 = _second.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e2 = _second.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                     {
                         while (await e1.MoveNextAsync())
                         {
@@ -70,14 +66,6 @@ namespace System.Linq
 
                         return !await e2.MoveNextAsync();
                     }
-                    finally
-                    {
-                        await e2.DisposeAsync();
-                    }
-                }
-                finally
-                {
-                    await e1.DisposeAsync();
                 }
             }
         }

+ 4 - 28
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Single.cs

@@ -30,9 +30,7 @@ namespace System.Linq
                     throw Error.MoreThanOneElement();
                 }
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -48,10 +46,6 @@ namespace System.Linq
 
                     return result;
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
         }
 
@@ -66,9 +60,7 @@ namespace System.Linq
 
             static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, bool> _predicate, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -88,10 +80,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 throw Error.NoElements();
             }
@@ -108,9 +96,7 @@ namespace System.Linq
 
             static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<bool>> _predicate, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -130,10 +116,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 throw Error.NoElements();
             }
@@ -151,9 +133,7 @@ namespace System.Linq
 
             static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<bool>> _predicate, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -173,10 +153,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 throw Error.NoElements();
             }

+ 4 - 28
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SingleOrDefault.cs

@@ -30,9 +30,7 @@ namespace System.Linq
                     throw Error.MoreThanOneElement();
                 }
 
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -46,10 +44,6 @@ namespace System.Linq
                         return result;
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 throw Error.MoreThanOneElement();
             }
@@ -66,9 +60,7 @@ namespace System.Linq
 
             async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, bool> _predicate, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -88,10 +80,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return default;
             }
@@ -108,9 +96,7 @@ namespace System.Linq
 
             async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, ValueTask<bool>> _predicate, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -130,10 +116,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return default;
             }
@@ -151,9 +133,7 @@ namespace System.Linq
 
             async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, Func<TSource, CancellationToken, ValueTask<bool>> _predicate, CancellationToken _cancellationToken)
             {
-                var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -173,10 +153,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 return default;
             }

+ 1 - 7
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipLast.cs

@@ -35,9 +35,7 @@ namespace System.Linq
             {
                 var queue = new Queue<TSource>();
 
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -57,10 +55,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipLastAsyncIterator<TSource>(source, count);

+ 6 - 42
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipWhile.cs

@@ -23,9 +23,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -44,10 +42,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipWhileAsyncIterator<TSource>(source, predicate);
@@ -66,9 +60,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     var index = -1;
 
@@ -94,10 +86,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipWhileWithIndexAsyncIterator<TSource>(source, predicate);
@@ -116,9 +104,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -137,10 +123,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipWhileAsyncIteratorWithTask<TSource>(source, predicate);
@@ -160,9 +142,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     while (await e.MoveNextAsync())
                     {
@@ -181,10 +161,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipWhileAsyncIteratorWithTaskAndCancellation<TSource>(source, predicate);
@@ -204,9 +180,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     var index = -1;
 
@@ -232,10 +206,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipWhileWithIndexAsyncIteratorWithTask<TSource>(source, predicate);
@@ -255,9 +225,7 @@ namespace System.Linq
 
             async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
             {
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     var index = -1;
 
@@ -283,10 +251,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
             }
 #else
             return new SkipWhileWithIndexAsyncIteratorWithTaskAndCancellation<TSource>(source, predicate);

+ 1 - 7
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeLast.cs

@@ -28,9 +28,7 @@ namespace System.Linq
             {
                 Queue<TSource> queue;
 
-                var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
                     if (!await e.MoveNextAsync())
                     {
@@ -58,10 +56,6 @@ namespace System.Linq
                         }
                     }
                 }
-                finally
-                {
-                    await e.DisposeAsync();
-                }
 
                 Debug.Assert(queue.Count <= count);
                 do

+ 6 - 42
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Zip.cs

@@ -25,27 +25,15 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e1 = first.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e1 = first.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
-                    var e2 = second.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e2 = second.GetConfiguredAsyncEnumerator(cancellationToken, false))
                     {
                         while (await e1.MoveNextAsync() && await e2.MoveNextAsync())
                         {
                             yield return selector(e1.Current, e2.Current);
                         }
                     }
-                    finally
-                    {
-                        await e2.DisposeAsync();
-                    }
-                }
-                finally
-                {
-                    await e1.DisposeAsync();
                 }
             }
 #else
@@ -67,27 +55,15 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e1 = first.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e1 = first.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
-                    var e2 = second.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e2 = second.GetConfiguredAsyncEnumerator(cancellationToken, false))
                     {
                         while (await e1.MoveNextAsync() && await e2.MoveNextAsync())
                         {
                             yield return await selector(e1.Current, e2.Current).ConfigureAwait(false);
                         }
                     }
-                    finally
-                    {
-                        await e2.DisposeAsync();
-                    }
-                }
-                finally
-                {
-                    await e1.DisposeAsync();
                 }
             }
 #else
@@ -110,27 +86,15 @@ namespace System.Linq
 
             async IAsyncEnumerator<TResult> Core(CancellationToken cancellationToken)
             {
-                var e1 = first.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                await using (var e1 = first.GetConfiguredAsyncEnumerator(cancellationToken, false))
                 {
-                    var e2 = second.GetConfiguredAsyncEnumerator(cancellationToken, false);
-
-                    try // TODO: Switch to `await using` in preview 3 (https://github.com/dotnet/roslyn/pull/32731)
+                    await using (var e2 = second.GetConfiguredAsyncEnumerator(cancellationToken, false))
                     {
                         while (await e1.MoveNextAsync() && await e2.MoveNextAsync())
                         {
                             yield return await selector(e1.Current, e2.Current, cancellationToken).ConfigureAwait(false);
                         }
                     }
-                    finally
-                    {
-                        await e2.DisposeAsync();
-                    }
-                }
-                finally
-                {
-                    await e1.DisposeAsync();
                 }
             }
 #else

部分文件因为文件数量过多而无法显示