diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs index 8664f03..ea337ed 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs @@ -234,6 +234,16 @@ namespace Cysharp.Threading.Tasks return new UniTask(new WithCancellationSource(task, cancellationToken), 0); } + + /// + /// Cancels last running instance to ensure there are not 2 or more instances of this UniTask running and regenerates the token source + /// + public static UniTask WithLastInstanceCancellation(this UniTask task, ref CancellationTokenSource cancellationTokenSource) + { + cancellationTokenSource.Cancel(); + cancellationTokenSource = new CancellationTokenSource(); + return task.WithCancellation(cancellationTokenSource.Token); + } sealed class WithCancellationSource : IUniTaskSource {