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

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();
//注意如果完成回调内发生异常会导致Task无限期等待
_callback?.Invoke(this);
if (_taskCompletionSource != null)
_taskCompletionSource.TrySetResult(null);
try
{
_callback?.Invoke(this);
}
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)
{
// TODO 高危风险:如果移除弱引用失败,会导致资源永远无法释放。
if (RemoveWeakReference(handle) == false)
throw new System.Exception("Should never get here !");
}
@@ -335,11 +336,18 @@ namespace YooAsset
List<WeakReference<HandleBase>> tempers = _weakReferences.ToList();
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)
{
handle.InvokeCallback();
try
{
handle.InvokeCallback();
}
catch (Exception ex)
{
YooLogger.Error($"Exception in completion callback: {ex}");
}
}
}
}