From 3be299e6f1b7d6b2aca35bfedfcff61b359126f5 Mon Sep 17 00:00:00 2001 From: gewuyou <95328647+GeWuYou@users.noreply.github.com> Date: Sat, 25 Apr 2026 09:38:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(game):=20=E6=B8=85=E7=90=86=20UiRouterBase?= =?UTF-8?q?=20=E7=9A=84=E4=BD=8E=E9=A3=8E=E9=99=A9=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E5=8C=85=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整 UiRouterBase 的异步过渡调用以显式保留同步上下文 - 清理 Push Pop Replace Clear 流程中的低风险 MA0004 - 保持 UI 生命周期顺序与过渡阶段语义不变 --- GFramework.Game/UI/UiRouterBase.cs | 46 +++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/GFramework.Game/UI/UiRouterBase.cs b/GFramework.Game/UI/UiRouterBase.cs index ede1b51b..1da37e6c 100644 --- a/GFramework.Game/UI/UiRouterBase.cs +++ b/GFramework.Game/UI/UiRouterBase.cs @@ -101,10 +101,10 @@ public abstract class UiRouterBase : RouterBase { - await BeforeChangeAsync(@event); - await DoPushPageInternalAsync(uiKey, param, policy); - await AfterChangeAsync(@event); - }); + await BeforeChangeAsync(@event).ConfigureAwait(true); + await DoPushPageInternalAsync(uiKey, param, policy).ConfigureAwait(true); + await AfterChangeAsync(@event).ConfigureAwait(true); + }).ConfigureAwait(true); } /// @@ -129,10 +129,10 @@ public abstract class UiRouterBase : RouterBase { - await BeforeChangeAsync(@event); + await BeforeChangeAsync(@event).ConfigureAwait(true); DoPushPageInternal(page, param, policy); - await AfterChangeAsync(@event); - }); + await AfterChangeAsync(@event).ConfigureAwait(true); + }).ConfigureAwait(true); } /// @@ -149,7 +149,7 @@ public abstract class UiRouterBase : RouterBase { - await BeforeChangeAsync(@event); + await BeforeChangeAsync(@event).ConfigureAwait(true); DoPopInternal(policy); - await AfterChangeAsync(@event); - }); + await AfterChangeAsync(@event).ConfigureAwait(true); + }).ConfigureAwait(true); } /// @@ -182,15 +182,15 @@ public abstract class UiRouterBase : RouterBase { - await BeforeChangeAsync(@event); + await BeforeChangeAsync(@event).ConfigureAwait(true); DoClearInternal(popPolicy); var page = _factory.Create(uiKey); Log.Debug("Get/Create UI Page instance for Replace: {0}", page.GetType().Name); DoPushPageInternal(page, param, pushPolicy); - await AfterChangeAsync(@event); - }); + await AfterChangeAsync(@event).ConfigureAwait(true); + }).ConfigureAwait(true); } /// @@ -211,12 +211,12 @@ public abstract class UiRouterBase : RouterBase { - await BeforeChangeAsync(@event); + await BeforeChangeAsync(@event).ConfigureAwait(true); DoClearInternal(popPolicy); Log.Debug("Use existing UI Page instance for Replace: {0}", page.GetType().Name); DoPushPageInternal(page, param, pushPolicy); - await AfterChangeAsync(@event); - }); + await AfterChangeAsync(@event).ConfigureAwait(true); + }).ConfigureAwait(true); } /// @@ -229,10 +229,10 @@ public abstract class UiRouterBase : RouterBase { - await BeforeChangeAsync(@event); + await BeforeChangeAsync(@event).ConfigureAwait(true); DoClearInternal(UiPopPolicy.Destroy); - await AfterChangeAsync(@event); - }); + await AfterChangeAsync(@event).ConfigureAwait(true); + }).ConfigureAwait(true); } /// @@ -650,7 +650,7 @@ public abstract class UiRouterBase : RouterBase过渡策略 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); return;