|
@@ -6,7 +6,6 @@ using System.Reactive.Concurrency;
|
|
|
using System.Reactive.Disposables;
|
|
|
using System.Reactive.Linq;
|
|
|
using System.Reactive.Linq.ObservableImpl;
|
|
|
-using System.Reactive.Subjects;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
@@ -77,7 +76,9 @@ namespace System.Reactive.Threading.Tasks
|
|
|
var options = GetTaskContinuationOptions(_scheduler);
|
|
|
|
|
|
if (_scheduler == null)
|
|
|
+ {
|
|
|
_task.ContinueWith((t, subjectObject) => t.EmitTaskResult((IObserver<TResult>)subjectObject), observer, cts.Token, options, TaskScheduler.Current);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
_task.ContinueWithState(
|
|
@@ -136,17 +137,14 @@ namespace System.Reactive.Threading.Tasks
|
|
|
{
|
|
|
if (task.IsCompleted)
|
|
|
{
|
|
|
- scheduler = scheduler ?? ImmediateScheduler.Instance;
|
|
|
+ scheduler ??= ImmediateScheduler.Instance;
|
|
|
|
|
|
- switch (task.Status)
|
|
|
+ return task.Status switch
|
|
|
{
|
|
|
- case TaskStatus.Faulted:
|
|
|
- return new Throw<Unit>(task.Exception.InnerException, scheduler);
|
|
|
- case TaskStatus.Canceled:
|
|
|
- return new Throw<Unit>(new TaskCanceledException(task), scheduler);
|
|
|
- }
|
|
|
-
|
|
|
- return new Return<Unit>(Unit.Default, scheduler);
|
|
|
+ TaskStatus.Faulted => new Throw<Unit>(task.Exception.InnerException, scheduler),
|
|
|
+ TaskStatus.Canceled => new Throw<Unit>(new TaskCanceledException(task), scheduler),
|
|
|
+ _ => new Return<Unit>(Unit.Default, scheduler)
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
return new SlowTaskObservable(task, scheduler);
|
|
@@ -235,17 +233,14 @@ namespace System.Reactive.Threading.Tasks
|
|
|
{
|
|
|
if (task.IsCompleted)
|
|
|
{
|
|
|
- scheduler = scheduler ?? ImmediateScheduler.Instance;
|
|
|
+ scheduler ??= ImmediateScheduler.Instance;
|
|
|
|
|
|
- switch (task.Status)
|
|
|
+ return task.Status switch
|
|
|
{
|
|
|
- case TaskStatus.Faulted:
|
|
|
- return new Throw<TResult>(task.Exception.InnerException, scheduler);
|
|
|
- case TaskStatus.Canceled:
|
|
|
- return new Throw<TResult>(new TaskCanceledException(task), scheduler);
|
|
|
- }
|
|
|
-
|
|
|
- return new Return<TResult>(task.Result, scheduler);
|
|
|
+ TaskStatus.Faulted => new Throw<TResult>(task.Exception.InnerException, scheduler),
|
|
|
+ TaskStatus.Canceled => new Throw<TResult>(new TaskCanceledException(task), scheduler),
|
|
|
+ _ => new Return<TResult>(task.Result, scheduler)
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
return new SlowTaskObservable<TResult>(task, scheduler);
|