浏览代码

Use a combined `try ... catch` for MoveNext & Current

Peter Wehrfritz 6 年之前
父节点
当前提交
f1e9933715
共有 1 个文件被更改,包括 7 次插入11 次删除
  1. 7 11
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToObservable.cs

+ 7 - 11
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToObservable.cs

@@ -36,9 +36,15 @@ namespace System.Linq
                         do
                         {
                             bool hasNext;
+                            var value = default(T)!;
+
                             try
                             {
                                 hasNext = await e.MoveNextAsync().ConfigureAwait(false);
+                                if (hasNext)
+                                {
+                                    value = e.Current;
+                                }
                             }
                             catch (Exception ex)
                             {
@@ -56,17 +62,7 @@ namespace System.Linq
                                 return;
                             }
 
-                            T v;
-                            try
-                            {
-                                v= e.Current;
-                            }
-                            catch (Exception ex)
-                            {
-                                observer.OnError(ex);
-                                return;
-                            }
-                            observer.OnNext(v);
+                            observer.OnNext(value);
                         }
                         while (!ctd.Token.IsCancellationRequested);
                     }