diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs b/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs index 8f863ddc..131d41fa 100644 --- a/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs +++ b/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs @@ -383,11 +383,7 @@ namespace TEngine Reference(handle); - UniTask uniTask = handle.ToUniTask(); - - uniTask.AttachExternalCancellation(cancellationToken); - - bool cancelOrFailed = await uniTask.SuppressCancellationThrow(); + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); if (cancelOrFailed) { diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/LruAssetGroup.cs b/Assets/TEngine/Runtime/GameFramework/Resource/LruAssetGroup.cs index b4d223ca..b705707d 100644 --- a/Assets/TEngine/Runtime/GameFramework/Resource/LruAssetGroup.cs +++ b/Assets/TEngine/Runtime/GameFramework/Resource/LruAssetGroup.cs @@ -300,11 +300,7 @@ namespace TEngine Reference(handle); - UniTask uniTask = handle.ToUniTask(); - - uniTask.AttachExternalCancellation(cancellationToken); - - bool cancelOrFailed = await uniTask.SuppressCancellationThrow(); + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); if (cancelOrFailed) { diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs b/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs index 9eab4587..ee91a909 100644 --- a/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs +++ b/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs @@ -421,14 +421,20 @@ namespace TEngine public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken) where T : Object { AssetOperationHandle handle = LoadAssetAsyncHandle(assetName); - UniTask uniTask = handle.ToUniTask(); - uniTask.AttachExternalCancellation(cancellationToken); - await uniTask; + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + if (cancelOrFailed) + { + return null; + } if (typeof(T) == typeof(GameObject)) { GameObject ret = handle.InstantiateSync(); + AssetReference.BindAssetReference(ret, handle, assetName); + return ret as T; } else @@ -446,10 +452,16 @@ namespace TEngine public async UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken) { AssetOperationHandle handle = LoadAssetAsyncHandle(assetName); - UniTask uniTask = handle.ToUniTask(); - uniTask.AttachExternalCancellation(cancellationToken); - await uniTask; + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + if (cancelOrFailed) + { + return null; + } + GameObject ret = handle.InstantiateSync(); + AssetReference.BindAssetReference(ret, handle, assetName); return ret;