From 8236b684548f3fdcff2780fd24d06f052dcec2d5 Mon Sep 17 00:00:00 2001 From: neuecc Date: Thu, 4 Jan 2024 21:59:47 +0900 Subject: [PATCH] Yield, YieldFrame(not tested) --- src/R3/Factories/Return.cs | 24 ++++++++++++++++++++++-- src/R3/Factories/ReturnFrame.cs | 22 ++++++++++++---------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/R3/Factories/Return.cs b/src/R3/Factories/Return.cs index d41e2cc..4f93fb7 100644 --- a/src/R3/Factories/Return.cs +++ b/src/R3/Factories/Return.cs @@ -1,7 +1,11 @@ -namespace R3; +using System; + +namespace R3; public static partial class Observable { + // TODO: CancellationToken? + public static Observable Return(T value) { return new ImmediateScheduleReturn(value); // immediate @@ -22,7 +26,7 @@ public static partial class Observable } } - return new Return(value, dueTime, timeProvider); // use ITimer + return new Return(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 Yield() + { + return new ThreadPoolScheduleReturn(default); + } + + public static Observable Yield(TimeProvider timeProvider) + { + if (timeProvider == TimeProvider.System) + { + return new ThreadPoolScheduleReturn(default); + } + return new Return(default, TimeSpan.Zero, timeProvider); + } } internal sealed class Return(T value, TimeSpan dueTime, TimeProvider timeProvider) : Observable diff --git a/src/R3/Factories/ReturnFrame.cs b/src/R3/Factories/ReturnFrame.cs index ea0dd96..66335e5 100644 --- a/src/R3/Factories/ReturnFrame.cs +++ b/src/R3/Factories/ReturnFrame.cs @@ -2,16 +2,6 @@ public static partial class Observable { - public static Observable ReturnUnitFrame(CancellationToken cancellationToken = default) - { - return ReturnFrame(Unit.Default, ObservableSystem.DefaultFrameProvider, cancellationToken); - } - - public static Observable ReturnUnitFrame(FrameProvider frameProvider, CancellationToken cancellationToken = default) - { - return ReturnFrame(Unit.Default, frameProvider, cancellationToken); - } - public static Observable ReturnFrame(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 YieldFrame(CancellationToken cancellationToken = default) + { + return ReturnFrame(Unit.Default, ObservableSystem.DefaultFrameProvider, cancellationToken); + } + + public static Observable YieldFrame(FrameProvider frameProvider, CancellationToken cancellationToken = default) + { + return ReturnFrame(Unit.Default, frameProvider, cancellationToken); + } } internal sealed class ReturnFrame(T value, FrameProvider frameProvider, CancellationToken cancellationToken) : Observable