Yield, YieldFrame(not tested)

This commit is contained in:
neuecc
2024-01-04 21:59:47 +09:00
parent 186703d869
commit 8236b68454
2 changed files with 34 additions and 12 deletions
+22 -2
View File
@@ -1,7 +1,11 @@
namespace R3;
using System;
namespace R3;
public static partial class Observable
{
// TODO: CancellationToken?
public static Observable<T> Return<T>(T value)
{
return new ImmediateScheduleReturn<T>(value); // immediate
@@ -22,7 +26,7 @@ public static partial class Observable
}
}
return new Return<T>(value, dueTime, timeProvider); // use ITimer
return new Return<T>(value, dueTime.Normalize(), timeProvider); // use ITimer
}
// Optimized case
@@ -46,6 +50,22 @@ public static partial class Observable
{
return ReturnInt32.GetObservable(value); // -1~9 singleton
}
// util
public static Observable<Unit> Yield()
{
return new ThreadPoolScheduleReturn<Unit>(default);
}
public static Observable<Unit> Yield(TimeProvider timeProvider)
{
if (timeProvider == TimeProvider.System)
{
return new ThreadPoolScheduleReturn<Unit>(default);
}
return new Return<Unit>(default, TimeSpan.Zero, timeProvider);
}
}
internal sealed class Return<T>(T value, TimeSpan dueTime, TimeProvider timeProvider) : Observable<T>
+12 -10
View File
@@ -2,16 +2,6 @@
public static partial class Observable
{
public static Observable<Unit> ReturnUnitFrame(CancellationToken cancellationToken = default)
{
return ReturnFrame(Unit.Default, ObservableSystem.DefaultFrameProvider, cancellationToken);
}
public static Observable<Unit> ReturnUnitFrame(FrameProvider frameProvider, CancellationToken cancellationToken = default)
{
return ReturnFrame(Unit.Default, frameProvider, cancellationToken);
}
public static Observable<T> ReturnFrame<T>(T value, CancellationToken cancellationToken = default)
{
return ReturnFrame(value, ObservableSystem.DefaultFrameProvider, cancellationToken);
@@ -41,6 +31,18 @@ public static partial class Observable
{
return new NextFrame(frameProvider, cancellationToken);
}
// util
public static Observable<Unit> YieldFrame(CancellationToken cancellationToken = default)
{
return ReturnFrame(Unit.Default, ObservableSystem.DefaultFrameProvider, cancellationToken);
}
public static Observable<Unit> YieldFrame(FrameProvider frameProvider, CancellationToken cancellationToken = default)
{
return ReturnFrame(Unit.Default, frameProvider, cancellationToken);
}
}
internal sealed class ReturnFrame<T>(T value, FrameProvider frameProvider, CancellationToken cancellationToken) : Observable<T>