瀏覽代碼

Improve ToEnumerable exception behavior.

Bart De Smet 7 年之前
父節點
當前提交
f42f8a6ccd
共有 1 個文件被更改,包括 16 次插入18 次删除
  1. 16 18
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToEnumerable.cs

+ 16 - 18
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToEnumerable.cs

@@ -13,29 +13,27 @@ namespace System.Linq
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
 
-            return ToEnumerableCore(source);
-        }
-
-        private static IEnumerable<TSource> ToEnumerableCore<TSource>(IAsyncEnumerable<TSource> source)
-        {
-            var e = source.GetAsyncEnumerator(default);
+            return Core();
 
-            try
+            IEnumerable<TSource> Core()
             {
-                while (true)
-                {
-                    if (!e.MoveNextAsync().Result)
-                        break;
+                var e = source.GetAsyncEnumerator(default);
 
-                    var c = e.Current;
+                try
+                {
+                    while (true)
+                    {
+                        if (!e.MoveNextAsync().GetAwaiter().GetResult())
+                            break;
 
-                    yield return c;
+                        yield return e.Current;
+                    }
+                }
+                finally
+                {
+                    // Wait
+                    e.DisposeAsync().GetAwaiter().GetResult();
                 }
-            }
-            finally
-            {
-                // Wait
-                e.DisposeAsync().GetAwaiter().GetResult();
             }
         }
     }