From 3f4a46bca68f4c6ac4c654ac7e10793471cceb7f Mon Sep 17 00:00:00 2001 From: taigacon Date: Mon, 25 Jan 2021 20:02:56 +0800 Subject: [PATCH] Fix using AsyncUnityEventHandler with a already canceled token --- .../UniTask/Runtime/UnityAsyncExtensions.uGUI.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.uGUI.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.uGUI.cs index f0dff57..6f7bec6 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.uGUI.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.uGUI.cs @@ -364,6 +364,7 @@ namespace Cysharp.Threading.Tasks public AsyncUnityEventHandler(UnityEvent unityEvent, CancellationToken cancellationToken, bool callOnce) { + this.cancellationToken = cancellationToken; if (cancellationToken.IsCancellationRequested) { isDisposed = true; @@ -372,7 +373,6 @@ namespace Cysharp.Threading.Tasks this.action = Invoke; this.unityEvent = unityEvent; - this.cancellationToken = cancellationToken; this.callOnce = callOnce; unityEvent.AddListener(action); @@ -388,6 +388,10 @@ namespace Cysharp.Threading.Tasks public UniTask OnInvokeAsync() { core.Reset(); + if (isDisposed) + { + core.TrySetCanceled(this.cancellationToken); + } return new UniTask(this, core.Version); } @@ -470,6 +474,7 @@ namespace Cysharp.Threading.Tasks public AsyncUnityEventHandler(UnityEvent unityEvent, CancellationToken cancellationToken, bool callOnce) { + this.cancellationToken = cancellationToken; if (cancellationToken.IsCancellationRequested) { isDisposed = true; @@ -478,7 +483,6 @@ namespace Cysharp.Threading.Tasks this.action = Invoke; this.unityEvent = unityEvent; - this.cancellationToken = cancellationToken; this.callOnce = callOnce; unityEvent.AddListener(action); @@ -494,6 +498,10 @@ namespace Cysharp.Threading.Tasks public UniTask OnInvokeAsync() { core.Reset(); + if (isDisposed) + { + core.TrySetCanceled(this.cancellationToken); + } return new UniTask(this, core.Version); }