当前位置: 首页 > news >正文

IStringLocalizer突然失效?线程的“失忆症”

IStringLocalizer服务,配合中间件,根据请求头或Cookie来设置当前线程的语系(Culture)。

问题代码示例:

public class HomeController : Controller
{private readonly IStringLocalizer<HomeController> _localizer;private readonly ILogger<HomeController> _logger;public HomeController(IStringLocalizer<HomeController> localizer, ILogger<HomeController> logger){_localizer = localizer;_logger = logger;}public IActionResult Index(){// 这里一切正常,_localizer 根据请求语系(如en-US)工作var message = _localizer["Hello"].Value;_logger.LogInformation("主线程消息: {Message}", message); // 输出:Hello// 开启一个后台任务Task.Run(() =>{// 这里出问题了!var backgroundMessage = _localizer["Hello"].Value;_logger.LogInformation("后台任务消息: {Message}", backgroundMessage); // 输出:你好});return View();}
}

[ASP.NET]Core的HttpContext(以及与之关联的语系信息)是与当前执行线程关联的,但它并不随Task的调度而自动流动。

  1. async/await 的“文明人”行为: 在纯粹的async/await代码中,会有一个叫做ExecutionContext的东西在背后默默工作。它像一个贴心的管家,会跟随await前后的代码流动,其中就包含了当前线程的语系(CultureInfo.CurrentCultureCultureInfo.CurrentUICulture)。所以,在大多数异步操作中,语系信息得以保持。
  2. Task.Run 的“野蛮”开局Task.Run用于将一个工作项丢到线程池队列中。线程池线程在开始执行这个任务时,它是一个“干净”的状态。它的语系默认是线程池的语系,而线程池的语系通常就是系统的默认语系(例如zh-CN)。ExecutionContext虽然会流动,但默认情况下,Task.Run不会捕获并流动调用线程的“语系”部分(更准确地说,在.NET Core/.NET 5+中,语系默认不包含在ExecutionContext的流动中,除非应用了兼容性开关)。
解决:在启动新Task之前,手动捕获当前的语系信息,并在任务内部显式地应用它。

警钟:在ASP.NET Core应用中,任何脱离原始HTTP请求上下文的后台操作(如Task.RunBackgroundServiceIHostedService),都必须显式处理语系等上下文信息的传递问题。

http://www.hskmm.com/?act=detail&tid=27953

相关文章:

  • IIS8.5 安装证书
  • 软件技术基础的第一次作业
  • UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision
  • n8n Docker 部署手册
  • 2025南通婚纱摄影厂家最新推荐榜:匠心工艺与浪漫美学完美结合
  • 免费音乐软件,哔哔音乐 免费下载及安装!免费音乐播放器
  • 多级缓存架构:性能与数据一致性的平衡处理(原理及优势详解+项目实战) - 教程
  • mysql设置最大连接数,MySQL最大连接数设置详解
  • 微信机器人API开放!手把手教你打造智能聊天机器人
  • 十二重计数法
  • Java高手速成--吃透源码+手写组件+定制开发
  • 【Excel】账单数据分析(数据透视表的简单应用)
  • CSP/NOIP 历年题解导引
  • 记一次Windows 10 无法打开计算器、照片等系统自带小工具问题解决
  • lca(倍增)
  • [SpringCloud][7]负载均衡介绍,以及一些搭建
  • BERT模型简化技术提升效率与容量
  • 251010
  • Redis 64字节分界线与跳表实现原理 - 实践
  • 新手报道
  • VUE---await的运用
  • 供应链业务架构设计概览
  • VS Code保存.vue文件自动格式化标签的问题
  • 基于最小二乘(LS)信道估计的MATLAB实现
  • 让老弟做个数据同步,结果踩了 7 个大坑!
  • 2025焊接件加工制造厂家口碑最新推荐榜:实力工艺与市场口碑
  • 2025机械加工厂家实力排行榜:技术精度与供货效率权威测评
  • 2025 年最新推荐!依托优质运输网络的国际搬家海运公司排行榜:覆盖澳洲多地家具海运需求澳洲/悉尼/墨尔本/大型家具海运公司推荐
  • 完整教程:计算机环境、用户与系统变量
  • 2025耐磨轮胎厂家TOP5推荐:超强抓地力与持久耐用性深度