Răsfoiți Sursa

Optimizing layouts of Empty, Return, and Throw.

Bart De Smet 8 ani în urmă
părinte
comite
3fe870b2f9

+ 6 - 9
Rx.NET/Source/src/System.Reactive/Linq/Observable/Empty.cs

@@ -17,24 +17,21 @@ namespace System.Reactive.Linq.ObservableImpl
 
         protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
         {
-            var sink = new _(this, observer, cancel);
+            var sink = new _(observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_scheduler);
         }
 
-        class _ : Sink<TResult>
+        private sealed class _ : Sink<TResult>
         {
-            private readonly Empty<TResult> _parent;
-
-            public _(Empty<TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(IObserver<TResult> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
             }
 
-            public IDisposable Run()
+            public IDisposable Run(IScheduler scheduler)
             {
-                return _parent._scheduler.Schedule(Invoke);
+                return scheduler.Schedule(Invoke);
             }
 
             private void Invoke()

+ 9 - 9
Rx.NET/Source/src/System.Reactive/Linq/Observable/Return.cs

@@ -19,29 +19,29 @@ namespace System.Reactive.Linq.ObservableImpl
 
         protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
         {
-            var sink = new _(this, observer, cancel);
+            var sink = new _(_value, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_scheduler);
         }
 
-        class _ : Sink<TResult>
+        private sealed class _ : Sink<TResult>
         {
-            private readonly Return<TResult> _parent;
+            private readonly TResult _value;
 
-            public _(Return<TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(TResult value, IObserver<TResult> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
+                _value = value;
             }
 
-            public IDisposable Run()
+            public IDisposable Run(IScheduler scheduler)
             {
-                return _parent._scheduler.Schedule(Invoke);
+                return scheduler.Schedule(Invoke);
             }
 
             private void Invoke()
             {
-                base._observer.OnNext(_parent._value);
+                base._observer.OnNext(_value);
                 base._observer.OnCompleted();
                 base.Dispose();
             }

+ 9 - 9
Rx.NET/Source/src/System.Reactive/Linq/Observable/Throw.cs

@@ -19,29 +19,29 @@ namespace System.Reactive.Linq.ObservableImpl
 
         protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
         {
-            var sink = new _(this, observer, cancel);
+            var sink = new _(_exception, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_scheduler);
         }
 
-        class _ : Sink<TResult>
+        private sealed class _ : Sink<TResult>
         {
-            private readonly Throw<TResult> _parent;
+            private readonly Exception _exception;
 
-            public _(Throw<TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Exception exception, IObserver<TResult> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
+                _exception = exception;
             }
 
-            public IDisposable Run()
+            public IDisposable Run(IScheduler scheduler)
             {
-                return _parent._scheduler.Schedule(Invoke);
+                return scheduler.Schedule(Invoke);
             }
 
             private void Invoke()
             {
-                base._observer.OnError(_parent._exception);
+                base._observer.OnError(_exception);
                 base.Dispose();
             }
         }