From 36ac0863adc827eb14389f9c91120a6d3d8aa88e Mon Sep 17 00:00:00 2001 From: Luciano Prestes Cavalcanti Date: Wed, 22 Nov 2023 08:09:03 -0300 Subject: [PATCH] Release handle when cancellation is requested --- .../Addressables/AddressablesAsyncExtensions.cs | 17 +++++++++++++++++ .../Addressables/UniTask.Addressables.asmdef | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs index a0ca8a1..0f3a25c 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs @@ -7,6 +7,7 @@ using System; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Threading; +using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; namespace Cysharp.Threading.Tasks @@ -171,6 +172,10 @@ namespace Cysharp.Threading.Tasks completed = true; if (cancellationToken.IsCancellationRequested) { + If (handle.IsValid()) + { + Addressables.Release(handle); + } core.TrySetCanceled(cancellationToken); } else if (handle.Status == AsyncOperationStatus.Failed) @@ -215,6 +220,10 @@ namespace Cysharp.Threading.Tasks if (cancellationToken.IsCancellationRequested) { completed = true; + if (handle.IsValid()) + { + Addressables.Release(handle); + } core.TrySetCanceled(cancellationToken); return false; } @@ -353,6 +362,10 @@ namespace Cysharp.Threading.Tasks completed = true; if (cancellationToken.IsCancellationRequested) { + if (handle.IsValid()) + { + Addressables.Release(handle); + } core.TrySetCanceled(cancellationToken); } else if (argHandle.Status == AsyncOperationStatus.Failed) @@ -402,6 +415,10 @@ namespace Cysharp.Threading.Tasks if (cancellationToken.IsCancellationRequested) { completed = true; + if (handle.IsValid()) + { + Addressables.Release(handle); + } core.TrySetCanceled(cancellationToken); return false; } diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef index 0439df7..faed8ec 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef @@ -2,7 +2,8 @@ "name": "UniTask.Addressables", "references": [ "UniTask", - "Unity.ResourceManager" + "Unity.ResourceManager", + "Unity.Addressables" ], "includePlatforms": [], "excludePlatforms": [],