From cdda33a98e8566a6be8fce7fe3dcbca752b4e1a2 Mon Sep 17 00:00:00 2001 From: neuecc Date: Mon, 1 Mar 2021 19:08:40 +0900 Subject: [PATCH] Add UniTask.Yield(CancellationToken), NextFrame(CancellationToken) --- .../Plugins/UniTask/Runtime/UniTask.Delay.cs | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs index add6e70..fc32d51 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs @@ -20,12 +20,23 @@ namespace Cysharp.Threading.Tasks public partial struct UniTask { - public static YieldAwaitable Yield(PlayerLoopTiming timing = PlayerLoopTiming.Update) + public static YieldAwaitable Yield() + { + // optimized for single continuation + return new YieldAwaitable(PlayerLoopTiming.Update); + } + + public static YieldAwaitable Yield(PlayerLoopTiming timing) { // optimized for single continuation return new YieldAwaitable(timing); } + public static UniTask Yield(CancellationToken cancellationToken) + { + return new UniTask(YieldPromise.Create(PlayerLoopTiming.Update, cancellationToken, out var token), token); + } + public static UniTask Yield(PlayerLoopTiming timing, CancellationToken cancellationToken) { return new UniTask(YieldPromise.Create(timing, cancellationToken, out var token), token); @@ -34,11 +45,36 @@ namespace Cysharp.Threading.Tasks /// /// Similar as UniTask.Yield but guaranteed run on next frame. /// - public static UniTask NextFrame(PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken = default) + public static UniTask NextFrame() + { + return new UniTask(NextFramePromise.Create(PlayerLoopTiming.Update, CancellationToken.None, out var token), token); + } + + /// + /// Similar as UniTask.Yield but guaranteed run on next frame. + /// + public static UniTask NextFrame(PlayerLoopTiming timing) + { + return new UniTask(NextFramePromise.Create(timing, CancellationToken.None, out var token), token); + } + + /// + /// Similar as UniTask.Yield but guaranteed run on next frame. + /// + public static UniTask NextFrame(CancellationToken cancellationToken) + { + return new UniTask(NextFramePromise.Create(PlayerLoopTiming.Update, cancellationToken, out var token), token); + } + + /// + /// Similar as UniTask.Yield but guaranteed run on next frame. + /// + public static UniTask NextFrame(PlayerLoopTiming timing, CancellationToken cancellationToken) { return new UniTask(NextFramePromise.Create(timing, cancellationToken, out var token), token); } + /// /// Same as UniTask.Yield(PlayerLoopTiming.LastPostLateUpdate). ///