关于开启事件收集导致清理缓存报错异常问题
版本1.19.19
报错信息:
Exception: Attempting to use an invalid operation handle
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_InternalOp () (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationHandle.cs:453)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.GetDependencies (System.Collections.Generic.List`1[T] deps) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationHandle.cs:436)
UnityEngine.AddressableAssets.Utility.ResourceManagerDiagnostics.SumDependencyNameHashCodes (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle handle) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Utility/ResourceManagerEventCollector.cs:43)
UnityEngine.AddressableAssets.Utility.ResourceManagerDiagnostics.SumDependencyNameHashCodes (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle handle) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Utility/ResourceManagerEventCollector.cs:49)
UnityEngine.AddressableAssets.Utility.ResourceManagerDiagnostics.CalculateHashCode (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle handle) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Utility/ResourceManagerEventCollector.cs:59)
UnityEngine.AddressableAssets.Utility.ResourceManagerDiagnostics.OnResourceManagerDiagnosticEvent (UnityEngine.ResourceManagement.ResourceManager+DiagnosticEventContext eventContext) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Utility/ResourceManagerEventCollector.cs:120)
UnityEngine.ResourceManagement.ResourceManager.PostDiagnosticEvent (UnityEngine.ResourceManagement.ResourceManager+DiagnosticEventContext context) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/ResourceManager.cs:315)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].Complete (TObject result, System.Boolean success, System.Exception exception, System.Boolean releaseDependenciesOnFailure) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:414)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].Complete (TObject result, System.Boolean success, System.String errorMsg, System.Boolean releaseDependenciesOnFailure) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:386)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].Complete (TObject result, System.Boolean success, System.String errorMsg) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:370)
UnityEngine.AddressableAssets.CleanBundleCacheOperation.CompleteInternal (System.Boolean result, System.Boolean success, System.String errorMsg) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Initialization/CleanBundleCacheOperation.cs:42)
UnityEngine.AddressableAssets.CleanBundleCacheOperation.RemoveCacheEntries () (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Initialization/CleanBundleCacheOperation.cs:117)
UnityEngine.AddressableAssets.CleanBundleCacheOperation.UnityEngine.ResourceManagement.IUpdateReceiver.Update (System.Single unscaledDeltaTime) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/Initialization/CleanBundleCacheOperation.cs:106)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].UpdateCallback (System.Single unscaledDeltaTime) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:354)
DelegateList`1[T].Invoke (T res) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/Util/DelegateList.cs:69)
UnityEngine.Debug:LogException(Exception)
DelegateList`1:Invoke(Single) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/Util/DelegateList.cs:73)
UnityEngine.ResourceManagement.ResourceManager:Update(Single)
MonoBehaviourCallbackHooks:Update() (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/Util/MonoBehaviourCallbackHooks.cs:26)
今天本来想看下加载的信息,开启了这个信息收集的功能,之后更新时报错,看了log并且打断点跟了下,发现是AA在执行清理缓存的Operation时,在任务完成时,先清理了持有的依赖的AsyncOperationHandle,然后又在基类的Complete方法中收集信息时,访问了其依赖的AsyncOperationHandle并递归访问其依赖的依赖,但由于其依赖已经被释放,无法访问到依赖的依赖,则抛出异常。