Explorar o código

ToLookup(): release lookup upon failure/termination (#704)

David Karnok %!s(int64=7) %!d(string=hai) anos
pai
achega
afbd6921c2
Modificáronse 1 ficheiros con 11 adicións e 2 borrados
  1. 11 2
      Rx.NET/Source/src/System.Reactive/Linq/Observable/ToLookup.cs

+ 11 - 2
Rx.NET/Source/src/System.Reactive/Linq/Observable/ToLookup.cs

@@ -30,7 +30,7 @@ namespace System.Reactive.Linq.ObservableImpl
         {
             private readonly Func<TSource, TKey> _keySelector;
             private readonly Func<TSource, TElement> _elementSelector;
-            private readonly Lookup<TKey, TElement> _lookup;
+            private Lookup<TKey, TElement> _lookup;
 
             public _(ToLookup<TSource, TKey, TElement> parent, IObserver<ILookup<TKey, TElement>> observer)
                 : base(observer)
@@ -48,13 +48,22 @@ namespace System.Reactive.Linq.ObservableImpl
                 }
                 catch (Exception ex)
                 {
+                    _lookup = null;
                     ForwardOnError(ex);
                 }
             }
 
+            public override void OnError(Exception error)
+            {
+                _lookup = null;
+                ForwardOnError(error);
+            }
+
             public override void OnCompleted()
             {
-                ForwardOnNext(_lookup);
+                var lookup = _lookup;
+                _lookup = null;
+                ForwardOnNext(lookup);
                 ForwardOnCompleted();
             }
         }