mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-22 09:21:41 +08:00
Yield, YieldFrame(not tested)
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user