fix(game): 清理 UiRouterBase 的低风险异步包装

- 调整 UiRouterBase 的异步过渡调用以显式保留同步上下文

- 清理 Push Pop Replace Clear 流程中的低风险 MA0004

- 保持 UI 生命周期顺序与过渡阶段语义不变
This commit is contained in:
gewuyou 2026-04-25 09:38:09 +08:00
parent e8eda8170c
commit 3be299e6f1

View File

@ -101,10 +101,10 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
await _pipeline.ExecuteAroundAsync(@event, async () => await _pipeline.ExecuteAroundAsync(@event, async () =>
{ {
await BeforeChangeAsync(@event); await BeforeChangeAsync(@event).ConfigureAwait(true);
await DoPushPageInternalAsync(uiKey, param, policy); await DoPushPageInternalAsync(uiKey, param, policy).ConfigureAwait(true);
await AfterChangeAsync(@event); await AfterChangeAsync(@event).ConfigureAwait(true);
}); }).ConfigureAwait(true);
} }
/// <summary> /// <summary>
@ -129,10 +129,10 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
await _pipeline.ExecuteAroundAsync(@event, async () => await _pipeline.ExecuteAroundAsync(@event, async () =>
{ {
await BeforeChangeAsync(@event); await BeforeChangeAsync(@event).ConfigureAwait(true);
DoPushPageInternal(page, param, policy); DoPushPageInternal(page, param, policy);
await AfterChangeAsync(@event); await AfterChangeAsync(@event).ConfigureAwait(true);
}); }).ConfigureAwait(true);
} }
/// <summary> /// <summary>
@ -149,7 +149,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
var leavingUiKey = Stack.Peek().Key; var leavingUiKey = Stack.Peek().Key;
if (!await ExecuteLeaveGuardsAsync(leavingUiKey)) if (!await ExecuteLeaveGuardsAsync(leavingUiKey).ConfigureAwait(true))
{ {
Log.Warn("Pop blocked by guard: {0}", leavingUiKey); Log.Warn("Pop blocked by guard: {0}", leavingUiKey);
return; return;
@ -160,10 +160,10 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
await _pipeline.ExecuteAroundAsync(@event, async () => await _pipeline.ExecuteAroundAsync(@event, async () =>
{ {
await BeforeChangeAsync(@event); await BeforeChangeAsync(@event).ConfigureAwait(true);
DoPopInternal(policy); DoPopInternal(policy);
await AfterChangeAsync(@event); await AfterChangeAsync(@event).ConfigureAwait(true);
}); }).ConfigureAwait(true);
} }
/// <summary> /// <summary>
@ -182,15 +182,15 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
await _pipeline.ExecuteAroundAsync(@event, async () => await _pipeline.ExecuteAroundAsync(@event, async () =>
{ {
await BeforeChangeAsync(@event); await BeforeChangeAsync(@event).ConfigureAwait(true);
DoClearInternal(popPolicy); DoClearInternal(popPolicy);
var page = _factory.Create(uiKey); var page = _factory.Create(uiKey);
Log.Debug("Get/Create UI Page instance for Replace: {0}", page.GetType().Name); Log.Debug("Get/Create UI Page instance for Replace: {0}", page.GetType().Name);
DoPushPageInternal(page, param, pushPolicy); DoPushPageInternal(page, param, pushPolicy);
await AfterChangeAsync(@event); await AfterChangeAsync(@event).ConfigureAwait(true);
}); }).ConfigureAwait(true);
} }
/// <summary> /// <summary>
@ -211,12 +211,12 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
await _pipeline.ExecuteAroundAsync(@event, async () => await _pipeline.ExecuteAroundAsync(@event, async () =>
{ {
await BeforeChangeAsync(@event); await BeforeChangeAsync(@event).ConfigureAwait(true);
DoClearInternal(popPolicy); DoClearInternal(popPolicy);
Log.Debug("Use existing UI Page instance for Replace: {0}", page.GetType().Name); Log.Debug("Use existing UI Page instance for Replace: {0}", page.GetType().Name);
DoPushPageInternal(page, param, pushPolicy); DoPushPageInternal(page, param, pushPolicy);
await AfterChangeAsync(@event); await AfterChangeAsync(@event).ConfigureAwait(true);
}); }).ConfigureAwait(true);
} }
/// <summary> /// <summary>
@ -229,10 +229,10 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
await _pipeline.ExecuteAroundAsync(@event, async () => await _pipeline.ExecuteAroundAsync(@event, async () =>
{ {
await BeforeChangeAsync(@event); await BeforeChangeAsync(@event).ConfigureAwait(true);
DoClearInternal(UiPopPolicy.Destroy); DoClearInternal(UiPopPolicy.Destroy);
await AfterChangeAsync(@event); await AfterChangeAsync(@event).ConfigureAwait(true);
}); }).ConfigureAwait(true);
} }
/// <summary> /// <summary>
@ -650,7 +650,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
private async Task BeforeChangeAsync(UiTransitionEvent @event) private async Task BeforeChangeAsync(UiTransitionEvent @event)
{ {
Log.Debug("BeforeChange phases started: {0}", @event.TransitionType); Log.Debug("BeforeChange phases started: {0}", @event.TransitionType);
await _pipeline.ExecuteAsync(@event, UiTransitionPhases.BeforeChange); await _pipeline.ExecuteAsync(@event, UiTransitionPhases.BeforeChange).ConfigureAwait(true);
Log.Debug("BeforeChange phases completed: {0}", @event.TransitionType); Log.Debug("BeforeChange phases completed: {0}", @event.TransitionType);
} }
@ -661,7 +661,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
private async Task AfterChangeAsync(UiTransitionEvent @event) private async Task AfterChangeAsync(UiTransitionEvent @event)
{ {
Log.Debug("AfterChange phases started: {0}", @event.TransitionType); Log.Debug("AfterChange phases started: {0}", @event.TransitionType);
await _pipeline.ExecuteAsync(@event, UiTransitionPhases.AfterChange); await _pipeline.ExecuteAsync(@event, UiTransitionPhases.AfterChange).ConfigureAwait(true);
Log.Debug("AfterChange phases completed: {0}", @event.TransitionType); Log.Debug("AfterChange phases completed: {0}", @event.TransitionType);
} }
@ -673,7 +673,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
/// <param name="policy">过渡策略</param> /// <param name="policy">过渡策略</param>
private async Task DoPushPageInternalAsync(string uiKey, IUiPageEnterParam? param, UiTransitionPolicy policy) private async Task DoPushPageInternalAsync(string uiKey, IUiPageEnterParam? param, UiTransitionPolicy policy)
{ {
if (!await ExecuteEnterGuardsAsync(uiKey, param)) if (!await ExecuteEnterGuardsAsync(uiKey, param).ConfigureAwait(true))
{ {
Log.Warn("Push blocked by guard: {0}", uiKey); Log.Warn("Push blocked by guard: {0}", uiKey);
return; return;