Selaa lähdekoodia

Optimizing CombineLatest layouts.

Bart De Smet 8 vuotta sitten
vanhempi
sitoutus
71f078a621

+ 260 - 302
Rx.NET/Source/src/System.Reactive/Linq/Observable/CombineLatest.Generated.cs

@@ -10,7 +10,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
     /* The following code is generated by a T4 template. */
 
-    #region CombineLatest auto-generated code (4/14/2017 12:18:58 PM)
+    #region CombineLatest auto-generated code (4/17/2017 3:25:27 PM)
 
     internal sealed class CombineLatest<T1, T2, T3, TResult> : Producer<TResult>
     {
@@ -29,26 +29,26 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, TResult> _parent;
+            private readonly Func<T1, T2, T3, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(3, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
             private CombineLatestObserver<T2> _observer2;
             private CombineLatestObserver<T3> _observer3;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3)
             {
                 var subscriptions = new SingleAssignmentDisposable[3];
                 for (int i = 0; i < 3; i++)
@@ -57,18 +57,15 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
                 _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
                 _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value);
         }
     }
 
@@ -91,19 +88,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(4, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -111,7 +108,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T3> _observer3;
             private CombineLatestObserver<T4> _observer4;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4)
             {
                 var subscriptions = new SingleAssignmentDisposable[4];
                 for (int i = 0; i < 4; i++)
@@ -121,19 +118,16 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
                 _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
                 _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value);
         }
     }
 
@@ -158,19 +152,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(5, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -179,7 +173,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T4> _observer4;
             private CombineLatestObserver<T5> _observer5;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5)
             {
                 var subscriptions = new SingleAssignmentDisposable[5];
                 for (int i = 0; i < 5; i++)
@@ -190,20 +184,17 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
                 _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
                 _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value);
         }
     }
 
@@ -230,19 +221,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(6, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -252,7 +243,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T5> _observer5;
             private CombineLatestObserver<T6> _observer6;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6)
             {
                 var subscriptions = new SingleAssignmentDisposable[6];
                 for (int i = 0; i < 6; i++)
@@ -264,21 +255,18 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
                 _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
                 _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value);
         }
     }
 
@@ -307,19 +295,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(7, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -330,7 +318,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T6> _observer6;
             private CombineLatestObserver<T7> _observer7;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7)
             {
                 var subscriptions = new SingleAssignmentDisposable[7];
                 for (int i = 0; i < 7; i++)
@@ -343,22 +331,19 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
                 _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
                 _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value);
         }
     }
 
@@ -389,19 +374,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(8, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -413,7 +398,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T7> _observer7;
             private CombineLatestObserver<T8> _observer8;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8)
             {
                 var subscriptions = new SingleAssignmentDisposable[8];
                 for (int i = 0; i < 8; i++)
@@ -427,23 +412,20 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
                 _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
                 _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value);
         }
     }
 
@@ -476,19 +458,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(9, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -501,7 +483,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T8> _observer8;
             private CombineLatestObserver<T9> _observer9;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9)
             {
                 var subscriptions = new SingleAssignmentDisposable[9];
                 for (int i = 0; i < 9; i++)
@@ -516,24 +498,21 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
                 _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
                 _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value);
         }
     }
 
@@ -568,19 +547,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(10, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -594,7 +573,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T9> _observer9;
             private CombineLatestObserver<T10> _observer10;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10)
             {
                 var subscriptions = new SingleAssignmentDisposable[10];
                 for (int i = 0; i < 10; i++)
@@ -610,25 +589,22 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
                 _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
                 _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value);
         }
     }
 
@@ -665,19 +641,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10, _source11);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(11, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -692,7 +668,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T10> _observer10;
             private CombineLatestObserver<T11> _observer11;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11)
             {
                 var subscriptions = new SingleAssignmentDisposable[11];
                 for (int i = 0; i < 11; i++)
@@ -709,26 +685,23 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
                 _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
                 _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = source11.SubscribeSafe(_observer11);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value);
         }
     }
 
@@ -767,19 +740,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10, _source11, _source12);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(12, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -795,7 +768,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T11> _observer11;
             private CombineLatestObserver<T12> _observer12;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12)
             {
                 var subscriptions = new SingleAssignmentDisposable[12];
                 for (int i = 0; i < 12; i++)
@@ -813,27 +786,24 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
                 _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
                 _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = source12.SubscribeSafe(_observer12);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value);
         }
     }
 
@@ -874,19 +844,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10, _source11, _source12, _source13);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(13, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -903,7 +873,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T12> _observer12;
             private CombineLatestObserver<T13> _observer13;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13)
             {
                 var subscriptions = new SingleAssignmentDisposable[13];
                 for (int i = 0; i < 13; i++)
@@ -922,28 +892,25 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
                 _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
                 _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = source13.SubscribeSafe(_observer13);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value);
         }
     }
 
@@ -986,19 +953,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10, _source11, _source12, _source13, _source14);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(14, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -1016,7 +983,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T13> _observer13;
             private CombineLatestObserver<T14> _observer14;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14)
             {
                 var subscriptions = new SingleAssignmentDisposable[14];
                 for (int i = 0; i < 14; i++)
@@ -1036,29 +1003,26 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
                 _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
                 _observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = source14.SubscribeSafe(_observer14);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value);
         }
     }
 
@@ -1103,19 +1067,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10, _source11, _source12, _source13, _source14, _source15);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(15, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -1134,7 +1098,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T14> _observer14;
             private CombineLatestObserver<T15> _observer15;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15)
             {
                 var subscriptions = new SingleAssignmentDisposable[15];
                 for (int i = 0; i < 15; i++)
@@ -1155,30 +1119,27 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
                 _observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
                 _observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = source14.SubscribeSafe(_observer14);
+                subscriptions[14].Disposable = source15.SubscribeSafe(_observer15);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value);
         }
     }
 
@@ -1225,19 +1186,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_source1, _source2, _source3, _source4, _source5, _source6, _source7, _source8, _source9, _source10, _source11, _source12, _source13, _source14, _source15, _source16);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _parent;
+            private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _resultSelector;
 
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(16, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private CombineLatestObserver<T1> _observer1;
@@ -1257,7 +1218,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private CombineLatestObserver<T15> _observer15;
             private CombineLatestObserver<T16> _observer16;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16)
             {
                 var subscriptions = new SingleAssignmentDisposable[16];
                 for (int i = 0; i < 16; i++)
@@ -1279,31 +1240,28 @@ namespace System.Reactive.Linq.ObservableImpl
                 _observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
                 _observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
                 _observer16 = new CombineLatestObserver<T16>(_gate, this, 15, subscriptions[15]);
-                
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
-                subscriptions[15].Disposable = _parent._source16.SubscribeSafe(_observer16);
+
+                subscriptions[0].Disposable = source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = source14.SubscribeSafe(_observer14);
+                subscriptions[14].Disposable = source15.SubscribeSafe(_observer15);
+                subscriptions[15].Disposable = source16.SubscribeSafe(_observer16);
 
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value, _observer16.Value);
-            }
+            protected override TResult GetResult() => _resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value, _observer16.Value);
         }
     }
 

+ 11 - 13
Rx.NET/Source/src/System.Reactive/Linq/Observable/CombineLatest.Generated.tt

@@ -24,6 +24,7 @@ for (var i = 3; i <= 16; i++)
     var ts = string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j));
     var os = string.Join(", ", Enumerable.Range(1, i).Select(j => "IObservable<T" + j + "> source" + j));
     var vs = string.Join(", ", Enumerable.Range(1, i).Select(j => "_observer" + j + ".Value"));
+    var ss = string.Join(", ", Enumerable.Range(1, i).Select(j => "_source" + j));
 #>
     internal sealed class CombineLatest<<#=ts#>, TResult> : Producer<TResult>
     {
@@ -52,19 +53,19 @@ for (var j = 1; j <= i; j++)
 
         protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
         {
-            var sink = new _(this, observer, cancel);
+            var sink = new _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(<#=ss#>);
         }
 
-        class _ : CombineLatestSink<TResult>
+        private sealed class _ : CombineLatestSink<TResult>
         {
-            private readonly CombineLatest<<#=ts#>, TResult> _parent;
+            private readonly Func<<#=ts#>, TResult> _resultSelector;
 
-            public _(CombineLatest<<#=ts#>, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<<#=ts#>, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(<#=i#>, observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
 <#
@@ -76,7 +77,7 @@ for (var j = 1; j <= i; j++)
 }
 #>
 
-            public IDisposable Run()
+            public IDisposable Run(<#=os#>)
             {
                 var subscriptions = new SingleAssignmentDisposable[<#=i#>];
                 for (int i = 0; i < <#=i#>; i++)
@@ -90,12 +91,12 @@ for (var j = 1; j <= i; j++)
 <#
 }
 #>
-                
+
 <#
 for (var j = 1; j <= i; j++)
 {
 #>
-                subscriptions[<#=j - 1#>].Disposable = _parent._source<#=j#>.SubscribeSafe(_observer<#=j#>);
+                subscriptions[<#=j - 1#>].Disposable = source<#=j#>.SubscribeSafe(_observer<#=j#>);
 <#
 }
 #>
@@ -103,10 +104,7 @@ for (var j = 1; j <= i; j++)
                 return StableCompositeDisposable.Create(subscriptions);
             }
 
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(<#=vs#>);
-            }
+            protected override TResult GetResult() => _resultSelector(<#=vs#>);
         }
     }
 

+ 36 - 39
Rx.NET/Source/src/System.Reactive/Linq/Observable/CombineLatest.cs

@@ -26,55 +26,55 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_first, _second);
         }
 
-        class _ : Sink<TResult>
+        private sealed class _ : Sink<TResult>
         {
-            private readonly CombineLatest<TFirst, TSecond, TResult> _parent;
+            private readonly Func<TFirst, TSecond, TResult> _resultSelector;
 
-            public _(CombineLatest<TFirst, TSecond, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<TFirst, TSecond, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private object _gate;
 
-            public IDisposable Run()
+            public IDisposable Run(IObservable<TFirst> first, IObservable<TSecond> second)
             {
                 _gate = new object();
 
                 var fstSubscription = new SingleAssignmentDisposable();
                 var sndSubscription = new SingleAssignmentDisposable();
 
-                var fstO = new F(this, fstSubscription);
-                var sndO = new S(this, sndSubscription);
+                var fstO = new FirstObserver(this, fstSubscription);
+                var sndO = new SecondObserver(this, sndSubscription);
 
                 fstO.Other = sndO;
                 sndO.Other = fstO;
 
-                fstSubscription.Disposable = _parent._first.SubscribeSafe(fstO);
-                sndSubscription.Disposable = _parent._second.SubscribeSafe(sndO);
+                fstSubscription.Disposable = first.SubscribeSafe(fstO);
+                sndSubscription.Disposable = second.SubscribeSafe(sndO);
 
                 return StableCompositeDisposable.Create(fstSubscription, sndSubscription);
             }
 
-            class F : IObserver<TFirst>
+            private sealed class FirstObserver : IObserver<TFirst>
             {
                 private readonly _ _parent;
                 private readonly IDisposable _self;
-                private S _other;
+                private SecondObserver _other;
 
-                public F(_ parent, IDisposable self)
+                public FirstObserver(_ parent, IDisposable self)
                 {
                     _parent = parent;
                     _self = self;
                 }
 
-                public S Other { set { _other = value; } }
+                public SecondObserver Other { set { _other = value; } }
 
                 public bool HasValue { get; private set; }
                 public TFirst Value { get; private set; }
@@ -92,7 +92,7 @@ namespace System.Reactive.Linq.ObservableImpl
                             var res = default(TResult);
                             try
                             {
-                                res = _parent._parent._resultSelector(value, _other.Value);
+                                res = _parent._resultSelector(value, _other.Value);
                             }
                             catch (Exception ex)
                             {
@@ -141,19 +141,19 @@ namespace System.Reactive.Linq.ObservableImpl
                 }
             }
 
-            class S : IObserver<TSecond>
+            private sealed class SecondObserver : IObserver<TSecond>
             {
                 private readonly _ _parent;
                 private readonly IDisposable _self;
-                private F _other;
+                private FirstObserver _other;
 
-                public S(_ parent, IDisposable self)
+                public SecondObserver(_ parent, IDisposable self)
                 {
                     _parent = parent;
                     _self = self;
                 }
 
-                public F Other { set { _other = value; } }
+                public FirstObserver Other { set { _other = value; } }
 
                 public bool HasValue { get; private set; }
                 public TSecond Value { get; private set; }
@@ -171,7 +171,7 @@ namespace System.Reactive.Linq.ObservableImpl
                             var res = default(TResult);
                             try
                             {
-                                res = _parent._parent._resultSelector(_other.Value, value);
+                                res = _parent._resultSelector(_other.Value, value);
                             }
                             catch (Exception ex)
                             {
@@ -228,14 +228,14 @@ namespace System.Reactive.Linq.ObservableImpl
 
     #region Helpers for n-ary overloads
 
-    interface ICombineLatest
+    internal interface ICombineLatest
     {
         void Next(int index);
         void Fail(Exception error);
         void Done(int index);
     }
 
-    abstract class CombineLatestSink<TResult> : Sink<TResult>, ICombineLatest
+    internal abstract class CombineLatestSink<TResult> : Sink<TResult>, ICombineLatest
     {
         protected readonly object _gate;
 
@@ -354,10 +354,7 @@ namespace System.Reactive.Linq.ObservableImpl
             _self = self;
         }
 
-        public T Value
-        {
-            get { return _value; }
-        }
+        public T Value => _value;
 
         public void OnNext(T value)
         {
@@ -408,19 +405,19 @@ 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 _(_resultSelector, observer, cancel);
             setSink(sink);
-            return sink.Run();
+            return sink.Run(_sources);
         }
 
-        class _ : Sink<TResult>
+        private sealed class _ : Sink<TResult>
         {
-            private readonly CombineLatest<TSource, TResult> _parent;
+            private readonly Func<IList<TSource>, TResult> _resultSelector;
 
-            public _(CombineLatest<TSource, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+            public _(Func<IList<TSource>, TResult> resultSelector, IObserver<TResult> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
+                _resultSelector = resultSelector;
             }
 
             private object _gate;
@@ -430,9 +427,9 @@ namespace System.Reactive.Linq.ObservableImpl
             private bool[] _isDone;
             private IDisposable[] _subscriptions;
 
-            public IDisposable Run()
+            public IDisposable Run(IEnumerable<IObservable<TSource>> sources)
             {
-                var srcs = _parent._sources.ToArray();
+                var srcs = sources.ToArray();
 
                 var N = srcs.Length;
 
@@ -456,7 +453,7 @@ namespace System.Reactive.Linq.ObservableImpl
                     var d = new SingleAssignmentDisposable();
                     _subscriptions[j] = d;
 
-                    var o = new O(this, j);
+                    var o = new SourceObserver(this, j);
                     d.Disposable = srcs[j].SubscribeSafe(o);
                 }
 
@@ -476,7 +473,7 @@ namespace System.Reactive.Linq.ObservableImpl
                         var res = default(TResult);
                         try
                         {
-                            res = _parent._resultSelector(new ReadOnlyCollection<TSource>(_values));
+                            res = _resultSelector(new ReadOnlyCollection<TSource>(_values));
                         }
                         catch (Exception ex)
                         {
@@ -524,12 +521,12 @@ namespace System.Reactive.Linq.ObservableImpl
                 }
             }
 
-            class O : IObserver<TSource>
+            private sealed class SourceObserver : IObserver<TSource>
             {
                 private readonly _ _parent;
                 private readonly int _index;
 
-                public O(_ parent, int index)
+                public SourceObserver(_ parent, int index)
                 {
                     _parent = parent;
                     _index = index;