Skip to content

Commit 612f646

Browse files
authored
Merge pull request #1312 from dotnet/dev/bartde/scheduler_value_task
Use ValueTask on schedulers.
2 parents 3bb62ff + 2c82a0f commit 612f646

File tree

13 files changed

+45
-45
lines changed

13 files changed

+45
-45
lines changed

AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/AsyncScheduler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static async ValueTask Delay(this IAsyncScheduler scheduler, TimeSpan due
9090
tcs.SetResult(true);
9191
}
9292

93-
return Task.CompletedTask;
93+
return default;
9494
}, dueTime);
9595

9696
using (token.Register(() => task.DisposeAsync()))
@@ -117,7 +117,7 @@ public static async ValueTask Delay(this IAsyncScheduler scheduler, DateTimeOffs
117117
tcs.SetResult(true);
118118
}
119119

120-
return Task.CompletedTask;
120+
return default;
121121
}, dueTime);
122122

123123
using (token.Register(() => task.DisposeAsync()))

AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/AsyncSchedulerBase.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ public abstract class AsyncSchedulerBase : IAsyncScheduler
1111
{
1212
public virtual DateTimeOffset Now => DateTimeOffset.Now;
1313

14-
public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, Task> action)
14+
public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, ValueTask> action)
1515
{
1616
if (action == null)
1717
throw new ArgumentNullException(nameof(action));
1818

1919
return ScheduleAsyncCore(action);
2020
}
2121

22-
public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, Task> action, TimeSpan dueTime)
22+
public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, ValueTask> action, TimeSpan dueTime)
2323
{
2424
if (action == null)
2525
throw new ArgumentNullException(nameof(action));
@@ -34,7 +34,7 @@ public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken,
3434
});
3535
}
3636

37-
public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, Task> action, DateTimeOffset dueTime)
37+
public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, ValueTask> action, DateTimeOffset dueTime)
3838
{
3939
if (action == null)
4040
throw new ArgumentNullException(nameof(action));
@@ -49,7 +49,7 @@ public virtual ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken,
4949
});
5050
}
5151

52-
protected virtual async ValueTask<IAsyncDisposable> ScheduleAsyncCore(Func<CancellationToken, Task> action)
52+
protected virtual async ValueTask<IAsyncDisposable> ScheduleAsyncCore(Func<CancellationToken, ValueTask> action)
5353
{
5454
var cad = new CancellationAsyncDisposable();
5555

@@ -58,9 +58,9 @@ protected virtual async ValueTask<IAsyncDisposable> ScheduleAsyncCore(Func<Cance
5858
return cad;
5959
}
6060

61-
protected abstract Task ScheduleAsyncCore(Func<CancellationToken, Task> action, CancellationToken token);
61+
protected abstract ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token);
6262

63-
protected abstract Task Delay(TimeSpan dueTime, CancellationToken token);
63+
protected abstract ValueTask Delay(TimeSpan dueTime, CancellationToken token);
6464

6565
protected static TimeSpan Normalize(TimeSpan timeSpan) => timeSpan < TimeSpan.Zero ? TimeSpan.Zero : timeSpan;
6666

AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/ImmediateAsyncScheduler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ public sealed class ImmediateAsyncScheduler : AsyncSchedulerBase
1313

1414
private ImmediateAsyncScheduler() { }
1515

16-
protected override Task Delay(TimeSpan dueTime, CancellationToken token) => Task.Delay(dueTime);
16+
protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new ValueTask(Task.Delay(dueTime));
1717

18-
protected override Task ScheduleAsyncCore(Func<CancellationToken, Task> action, CancellationToken token) => action(token);
18+
protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token) => action(token);
1919
}
2020
}

AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/SynchronizationContextAsyncScheduler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public SynchronizationContextAsyncScheduler(SynchronizationContext context)
1616
_context = context ?? throw new ArgumentNullException(nameof(context));
1717
}
1818

19-
protected override Task Delay(TimeSpan dueTime, CancellationToken token) => Task.Delay(dueTime, token);
19+
protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new ValueTask(Task.Delay(dueTime, token));
2020

21-
protected override Task ScheduleAsyncCore(Func<CancellationToken, Task> action, CancellationToken token)
21+
protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token)
2222
{
2323
_context.Post(_ =>
2424
{
@@ -28,7 +28,7 @@ protected override Task ScheduleAsyncCore(Func<CancellationToken, Task> action,
2828
}
2929
}, null);
3030

31-
return Task.CompletedTask;
31+
return default;
3232
}
3333
}
3434
}

AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/TaskPoolAsyncScheduler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public TaskPoolAsyncScheduler(TaskFactory factory)
2727
_factory = factory ?? throw new ArgumentNullException(nameof(factory));
2828
}
2929

30-
protected override Task Delay(TimeSpan dueTime, CancellationToken token) => Task.Delay(dueTime, token);
30+
protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new ValueTask(Task.Delay(dueTime, token));
3131

32-
protected override Task ScheduleAsyncCore(Func<CancellationToken, Task> action, CancellationToken token)
32+
protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token)
3333
{
34-
var task = _factory.StartNew(() => action(token), token);
34+
var task = _factory.StartNew(() => action(token).AsTask(), token);
3535

3636
task.Unwrap().ContinueWith(t =>
3737
{
@@ -41,7 +41,7 @@ protected override Task ScheduleAsyncCore(Func<CancellationToken, Task> action,
4141
}
4242
});
4343

44-
return Task.CompletedTask;
44+
return default;
4545
}
4646
}
4747
}

AsyncRx.NET/System.Reactive.Async.Interfaces/System/Reactive/Concurrency/IAsyncScheduler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ namespace System.Reactive.Concurrency
99
{
1010
public interface IAsyncScheduler : IClock
1111
{
12-
ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, Task> action);
13-
ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, Task> action, TimeSpan dueTime);
14-
ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, Task> action, DateTimeOffset dueTime);
12+
ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, ValueTask> action);
13+
ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, ValueTask> action, TimeSpan dueTime);
14+
ValueTask<IAsyncDisposable> ScheduleAsync(Func<CancellationToken, ValueTask> action, DateTimeOffset dueTime);
1515
}
1616
}

AsyncRx.NET/System.Reactive.Async.Linq/System/Runtime/CompilerServices/AsyncObservableMethodBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ private static void Rethrow(Exception exception)
187187
{
188188
ExceptionDispatchInfo.Capture(exception).Throw();
189189

190-
return System.Threading.Tasks.Task.CompletedTask;
190+
return default;
191191
});
192192
}
193193

AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/FastImmediateAsyncObserver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ public FastImmediateAsyncObserver(IAsyncObserver<T> observer)
2727

2828
protected override IAwaitable<R> RendezVous<R>(ValueTask<R> task) => new ValueTaskAwaitable<R>(task, false, null, CancellationToken.None);
2929

30-
protected override Task ScheduleAsync() => RunAsync(_disposable.Token);
30+
protected override ValueTask ScheduleAsync() => RunAsync(_disposable.Token);
3131
}
3232
}

AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/ISchedulerAsyncObserver.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace System.Reactive
88
{
99
internal interface IScheduledAsyncObserver<T> : IAsyncObserver<T>, IAsyncDisposable
1010
{
11-
Task EnsureActive();
11+
ValueTask EnsureActive();
1212

13-
Task EnsureActive(int count);
13+
ValueTask EnsureActive(int count);
1414
}
1515
}

AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/ScheduledAsyncObserver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ScheduledAsyncObserver(IAsyncObserver<T> observer, IAsyncScheduler schedu
3131

3232
protected override IAwaitable<R> RendezVous<R>(ValueTask<R> task) => new ValueTaskAwaitable<R>(task, false, _scheduler, CancellationToken.None);
3333

34-
protected override async Task ScheduleAsync()
34+
protected override async ValueTask ScheduleAsync()
3535
{
3636
var d = await _scheduler.ScheduleAsync(RunAsync).ConfigureAwait(false);
3737
await _disposable.AssignAsync(d).ConfigureAwait(false);

0 commit comments

Comments
 (0)