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

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
@@ -188,13 +188,21 @@ namespace YooAsset
// 结束记录 // 结束记录
DebugEndRecording(); DebugEndRecording();
//注意:如果完成回调内发生异常,会导致Task无限期等待 try
{
_callback?.Invoke(this); _callback?.Invoke(this);
}
catch (Exception ex)
{
YooLogger.Error($"Exception in completion callback: {ex}");
}
finally
{
if (_taskCompletionSource != null) if (_taskCompletionSource != null)
_taskCompletionSource.TrySetResult(null); _taskCompletionSource.TrySetResult(null);
} }
} }
}
/// <summary> /// <summary>
/// 终止异步任务 /// 终止异步任务
@@ -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}");
}
} }
} }
} }
@@ -350,9 +358,16 @@ namespace YooAsset
foreach (var handle in tempers) foreach (var handle in tempers)
{ {
if (handle.IsValid) if (handle.IsValid)
{
try
{ {
handle.InvokeCallback(); handle.InvokeCallback();
} }
catch (Exception ex)
{
YooLogger.Error($"Exception in completion callback: {ex}");
}
}
} }
} }
} }