完善一些高危风险的代码容错机制。

This commit is contained in:
何冠峰
2025-12-04 20:34:29 +08:00
parent 4b6a8ca406
commit 33356cb270
2 changed files with 32 additions and 9 deletions

View File

@@ -188,11 +188,19 @@ namespace YooAsset
// 结束记录 // 结束记录
DebugEndRecording(); DebugEndRecording();
//注意如果完成回调内发生异常会导致Task无限期等待 try
_callback?.Invoke(this); {
_callback?.Invoke(this);
if (_taskCompletionSource != null) }
_taskCompletionSource.TrySetResult(null); catch (Exception ex)
{
YooLogger.Error($"Exception in completion callback: {ex}");
}
finally
{
if (_taskCompletionSource != null)
_taskCompletionSource.TrySetResult(null);
}
} }
} }

View File

@@ -269,6 +269,7 @@ namespace YooAsset
if (_resManager.UseWeakReferenceHandle) if (_resManager.UseWeakReferenceHandle)
{ {
// TODO 高危风险:如果移除弱引用失败,会导致资源永远无法释放。
if (RemoveWeakReference(handle) == false) if (RemoveWeakReference(handle) == false)
throw new System.Exception("Should never get here !"); throw new System.Exception("Should never get here !");
} }
@@ -335,11 +336,18 @@ namespace YooAsset
List<WeakReference<HandleBase>> tempers = _weakReferences.ToList(); List<WeakReference<HandleBase>> tempers = _weakReferences.ToList();
foreach (var weakRef in tempers) foreach (var weakRef in tempers)
{ {
if (weakRef.TryGetTarget(out HandleBase target)) if (weakRef.TryGetTarget(out HandleBase handle))
{ {
if (target.IsValid) if (handle.IsValid)
{ {
target.InvokeCallback(); try
{
handle.InvokeCallback();
}
catch (Exception ex)
{
YooLogger.Error($"Exception in completion callback: {ex}");
}
} }
} }
} }
@@ -351,7 +359,14 @@ namespace YooAsset
{ {
if (handle.IsValid) if (handle.IsValid)
{ {
handle.InvokeCallback(); try
{
handle.InvokeCallback();
}
catch (Exception ex)
{
YooLogger.Error($"Exception in completion callback: {ex}");
}
} }
} }
} }