Browse Source

Optimizing layout of Defer.

Bart De Smet 8 years ago
parent
commit
3e806862e5
1 changed files with 7 additions and 10 deletions
  1. 7 10
      Rx.NET/Source/src/System.Reactive/Linq/Observable/Defer.cs

+ 7 - 10
Rx.NET/Source/src/System.Reactive/Linq/Observable/Defer.cs

@@ -17,24 +17,21 @@ namespace System.Reactive.Linq.ObservableImpl
 
         protected override IDisposable Run(IObserver<TValue> observer, IDisposable cancel, Action<IDisposable> setSink)
         {
-            var sink = new _(this, observer, cancel);
+            var sink = new _(_observableFactory, observer, cancel);
             setSink(sink);
             return sink.Run();
         }
 
-        public IObservable<TValue> Eval()
-        {
-            return _observableFactory();
-        }
+        public IObservable<TValue> Eval() => _observableFactory();
 
-        class _ : Sink<TValue>, IObserver<TValue>
+        private sealed class _ : Sink<TValue>, IObserver<TValue>
         {
-            private readonly Defer<TValue> _parent;
+            private readonly Func<IObservable<TValue>> _observableFactory;
 
-            public _(Defer<TValue> parent, IObserver<TValue> observer, IDisposable cancel)
+            public _(Func<IObservable<TValue>> observableFactory, IObserver<TValue> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
+                _observableFactory = observableFactory;
             }
 
             public IDisposable Run()
@@ -42,7 +39,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 var result = default(IObservable<TValue>);
                 try
                 {
-                    result = _parent.Eval();
+                    result = _observableFactory();
                 }
                 catch (Exception exception)
                 {