Prechádzať zdrojové kódy

Use ContinueWithState in two other places to save an allocation.

Daniel Weber 7 rokov pred
rodič
commit
81ad48ec76

+ 18 - 2
Rx.NET/Source/src/System.Reactive/Threading/Tasks/TaskObservableExtensions.cs

@@ -41,7 +41,15 @@ namespace System.Reactive.Threading.Tasks
                 if (_scheduler == null)
                     _task.ContinueWith((t, subjectObject) => t.EmitTaskResult((IObserver<Unit>)subjectObject), observer, cts.Token, options, TaskScheduler.Current);
                 else
-                    _task.ContinueWith((t, subjectObject) => _scheduler.ScheduleAction((t, subjectObject), tuple => tuple.t.EmitTaskResult((IObserver<Unit>)tuple.subjectObject)), observer, cts.Token, options, TaskScheduler.Current);
+                {
+                    _task.ContinueWithState(
+                        (task, tuple) => tuple.@this._scheduler.ScheduleAction(
+                            (task, tuple.observer),
+                            tuple2 => tuple2.task.EmitTaskResult(tuple2.observer)),
+                        (@this: this, observer),
+                        cts.Token,
+                        options);
+                }
 
                 return cts;
             }
@@ -71,7 +79,15 @@ namespace System.Reactive.Threading.Tasks
                 if (_scheduler == null)
                     _task.ContinueWith((t, subjectObject) => t.EmitTaskResult((IObserver<TResult>)subjectObject), observer, cts.Token, options, TaskScheduler.Current);
                 else
-                    _task.ContinueWith((t, subjectObject) => _scheduler.ScheduleAction((t, subjectObject), tuple => tuple.t.EmitTaskResult((IObserver<TResult>)tuple.subjectObject)), observer, cts.Token, options, TaskScheduler.Current);
+                {
+                    _task.ContinueWithState(
+                        (task, tuple) => tuple.@this._scheduler.ScheduleAction(
+                            (task, tuple.observer),
+                            tuple2 => tuple2.task.EmitTaskResult(tuple2.observer)),
+                        (@this: this, observer),
+                        cts.Token,
+                        options);
+                }
 
                 return cts;
             }