From 3eb14dfe4bce71c7c45e60b058705c8a9feb7f8f Mon Sep 17 00:00:00 2001 From: Extrys Date: Sun, 20 Sep 2020 14:42:55 +0200 Subject: [PATCH] Update UniTaskExtensions.cs Added an extension to run single-instance unitasks using CancellationTokenSourceReferences This avoids running several instances of unitasks using the same CancellationToenSource reference --- .../Plugins/UniTask/Runtime/UniTaskExtensions.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 {