mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-13 06:04:30 +08:00
fix(game): 清理 SceneRouterBase 低风险异步包装
- 重构 Replace、Push、Pop、Clear 的 around pipeline 核心委托,移除匿名 async 包装 - 补充 BeforeChange 与 AfterChange 的 ConfigureAwait(false),收敛明显低风险 MA0004 - 保留场景生命周期与栈操作相关 await 的默认上下文行为,并在代码中说明原因
This commit is contained in:
parent
64c8589489
commit
4bb8f4f429
@ -89,13 +89,9 @@ public abstract class SceneRouterBase
|
|||||||
|
|
||||||
var @event = CreateEvent(sceneKey, SceneTransitionType.Replace, param);
|
var @event = CreateEvent(sceneKey, SceneTransitionType.Replace, param);
|
||||||
|
|
||||||
await _pipeline.ExecuteAroundAsync(@event, async () =>
|
await _pipeline.ExecuteAroundAsync(
|
||||||
{
|
@event,
|
||||||
await BeforeChangeAsync(@event);
|
() => ExecuteReplaceCoreAsync(@event, sceneKey, param)).ConfigureAwait(false);
|
||||||
await ClearInternalAsync();
|
|
||||||
await PushInternalAsync(sceneKey, param);
|
|
||||||
await AfterChangeAsync(@event);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -195,12 +191,9 @@ public abstract class SceneRouterBase
|
|||||||
|
|
||||||
var @event = CreateEvent(sceneKey, SceneTransitionType.Push, param);
|
var @event = CreateEvent(sceneKey, SceneTransitionType.Push, param);
|
||||||
|
|
||||||
await _pipeline.ExecuteAroundAsync(@event, async () =>
|
await _pipeline.ExecuteAroundAsync(
|
||||||
{
|
@event,
|
||||||
await BeforeChangeAsync(@event);
|
() => ExecutePushCoreAsync(@event, sceneKey, param)).ConfigureAwait(false);
|
||||||
await PushInternalAsync(sceneKey, param);
|
|
||||||
await AfterChangeAsync(@event);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -276,12 +269,9 @@ public abstract class SceneRouterBase
|
|||||||
|
|
||||||
var @event = CreateEvent(null, SceneTransitionType.Pop);
|
var @event = CreateEvent(null, SceneTransitionType.Pop);
|
||||||
|
|
||||||
await _pipeline.ExecuteAroundAsync(@event, async () =>
|
await _pipeline.ExecuteAroundAsync(
|
||||||
{
|
@event,
|
||||||
await BeforeChangeAsync(@event);
|
() => ExecutePopCoreAsync(@event)).ConfigureAwait(false);
|
||||||
await PopInternalAsync();
|
|
||||||
await AfterChangeAsync(@event);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -347,12 +337,9 @@ public abstract class SceneRouterBase
|
|||||||
|
|
||||||
var @event = CreateEvent(null, SceneTransitionType.Clear);
|
var @event = CreateEvent(null, SceneTransitionType.Clear);
|
||||||
|
|
||||||
await _pipeline.ExecuteAroundAsync(@event, async () =>
|
await _pipeline.ExecuteAroundAsync(
|
||||||
{
|
@event,
|
||||||
await BeforeChangeAsync(@event);
|
() => ExecuteClearCoreAsync(@event)).ConfigureAwait(false);
|
||||||
await ClearInternalAsync();
|
|
||||||
await AfterChangeAsync(@event);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -378,6 +365,66 @@ public abstract class SceneRouterBase
|
|||||||
|
|
||||||
#region Helper Methods
|
#region Helper Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行 Replace 的核心切换顺序。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="event">场景转换事件。</param>
|
||||||
|
/// <param name="sceneKey">目标场景键名。</param>
|
||||||
|
/// <param name="param">场景进入参数。</param>
|
||||||
|
/// <returns>异步任务。</returns>
|
||||||
|
private async Task ExecuteReplaceCoreAsync(
|
||||||
|
SceneTransitionEvent @event,
|
||||||
|
string sceneKey,
|
||||||
|
ISceneEnterParam? param)
|
||||||
|
{
|
||||||
|
// 场景生命周期回调可能依赖引擎线程,因此这里保留默认 await 行为。
|
||||||
|
await BeforeChangeAsync(@event);
|
||||||
|
await ClearInternalAsync();
|
||||||
|
await PushInternalAsync(sceneKey, param);
|
||||||
|
await AfterChangeAsync(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行 Push 的核心切换顺序。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="event">场景转换事件。</param>
|
||||||
|
/// <param name="sceneKey">目标场景键名。</param>
|
||||||
|
/// <param name="param">场景进入参数。</param>
|
||||||
|
/// <returns>异步任务。</returns>
|
||||||
|
private async Task ExecutePushCoreAsync(
|
||||||
|
SceneTransitionEvent @event,
|
||||||
|
string sceneKey,
|
||||||
|
ISceneEnterParam? param)
|
||||||
|
{
|
||||||
|
await BeforeChangeAsync(@event);
|
||||||
|
await PushInternalAsync(sceneKey, param);
|
||||||
|
await AfterChangeAsync(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行 Pop 的核心切换顺序。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="event">场景转换事件。</param>
|
||||||
|
/// <returns>异步任务。</returns>
|
||||||
|
private async Task ExecutePopCoreAsync(SceneTransitionEvent @event)
|
||||||
|
{
|
||||||
|
await BeforeChangeAsync(@event);
|
||||||
|
await PopInternalAsync();
|
||||||
|
await AfterChangeAsync(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行 Clear 的核心切换顺序。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="event">场景转换事件。</param>
|
||||||
|
/// <returns>异步任务。</returns>
|
||||||
|
private async Task ExecuteClearCoreAsync(SceneTransitionEvent @event)
|
||||||
|
{
|
||||||
|
await BeforeChangeAsync(@event);
|
||||||
|
await ClearInternalAsync();
|
||||||
|
await AfterChangeAsync(@event);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建场景转换事件对象。
|
/// 创建场景转换事件对象。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -407,7 +454,7 @@ public abstract class SceneRouterBase
|
|||||||
private async Task BeforeChangeAsync(SceneTransitionEvent @event)
|
private async Task BeforeChangeAsync(SceneTransitionEvent @event)
|
||||||
{
|
{
|
||||||
Log.Debug("BeforeChange phases started: {0}", @event.TransitionType);
|
Log.Debug("BeforeChange phases started: {0}", @event.TransitionType);
|
||||||
await _pipeline.ExecuteAsync(@event, SceneTransitionPhases.BeforeChange);
|
await _pipeline.ExecuteAsync(@event, SceneTransitionPhases.BeforeChange).ConfigureAwait(false);
|
||||||
Log.Debug("BeforeChange phases completed: {0}", @event.TransitionType);
|
Log.Debug("BeforeChange phases completed: {0}", @event.TransitionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,7 +465,7 @@ public abstract class SceneRouterBase
|
|||||||
private async Task AfterChangeAsync(SceneTransitionEvent @event)
|
private async Task AfterChangeAsync(SceneTransitionEvent @event)
|
||||||
{
|
{
|
||||||
Log.Debug("AfterChange phases started: {0}", @event.TransitionType);
|
Log.Debug("AfterChange phases started: {0}", @event.TransitionType);
|
||||||
await _pipeline.ExecuteAsync(@event, SceneTransitionPhases.AfterChange);
|
await _pipeline.ExecuteAsync(@event, SceneTransitionPhases.AfterChange).ConfigureAwait(false);
|
||||||
Log.Debug("AfterChange phases completed: {0}", @event.TransitionType);
|
Log.Debug("AfterChange phases completed: {0}", @event.TransitionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user