diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs index 80ae27c..9cbe2ed 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs @@ -98,6 +98,25 @@ namespace Cysharp.Threading.Tasks if (!tween.IsActive()) return UniTask.CompletedTask; return new UniTask(TweenConfiguredSource.Create(tween, tweenCancelBehaviour, cancellationToken, CallbackType.StepComplete, out var token), token); } + + public static UniTask AwaitWithCancellation(this Tween tween, CancellationToken cancellationToken) + { + Error.ThrowArgumentNullException(tween, nameof(tween)); + + if (!tween.IsActive()) return UniTask.CompletedTask; + + var registration = cancellationToken.Register(() => + { + if (tween.IsActive()) + { + tween.Kill(); + } + }); + + tween.OnKill((() => registration.Dispose())); + + return tween.ToUniTask(TweenCancelBehaviour.KillAndCancelAwait, cancellationToken); + } public struct TweenAwaiter : ICriticalNotifyCompletion {