You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多个InvokeAsync调用中保证CurrentUICulture一致性

如何保证多次InvokeAsync调用中的CultureInfo.CurrentUICulture一致

由于渲染器调度程序不是线程调度程序,多次InvokeAsync调用可能会使用不同的线程,有没有办法可以保证所有调用中的CultureInfo.CurrentUICulture完全一致?

我的应用区域设置是动态的(存储在会话中,不来自ASP.NET本地化中间件,可在SignalR circuit内动态修改,无需新建HTTP连接),当前区域设置存储在每个组件中,但来自不同circuit(可能携带不同区域设置)的事件可能需要修改其他用户渲染的组件实例内容。

我将组件的CultureInfo存储在组件内部,但我不想在模板中每次都编写ToString(Culture)或者@bind-X:culture="@Culture",这类写法既繁琐又容易遗漏出错,因此每当组件区域设置变更时,我会执行如下操作:

await InvokeAsync(() => CultureInfo.CurrentUICulture = newCulture);

这样操作是否足够保证该组件后续的其他InvokeAsync调用(以及渲染器调度程序)能正确获取到对应的线程区域设置?

目前看起来可以正常运行,但我没有在任何官方文档中找到相关保证(也没有文档说明InvokeAsync会在不同调用之间保留本地线程的值)

更新

我做了一个简单的测试页,实测CurrentCulture/CurrentUICulture完全不会:

  • 在组件上下文中随异步调用流动
  • 在InvokeAsync()中修改后生效

因此目前没有可行解决方案,除非有人将该流动逻辑添加到renderer synchronization context的实现中。

我已经提交了对应的功能需求到.NET官方aspnetcore仓库的反馈队列中。

内容的提问来源于stack exchange,提问作者Jcl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:06:04