当前位置: 首页 > 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.gsyq.cn/news/18117.html

相关文章:

  • c# 读取xml到datagridview
  • KLT就是Android中开一个线程是ULT还
  • 记一次Windows 10 无法打开计算器、照片等系统自带小工具问题解决
  • 数据库设计原则文档 - 指南
  • 251010
  • 一款快速复制软件!FastCopy复制软件绿色版下载
  • 深入解析:【数据结构】List 详解
  • 光流估计(可用于目标跟踪) - 教程
  • 使用建造者模式创建对象 - 教程
  • 供应链业务架构设计概览
  • 深入解析:Oracle等待事件的sequential read和scattered read
  • 2025焊接件加工制造厂家口碑最新推荐榜:实力工艺与市场口碑
  • 完整教程:计算机环境、用户与系统变量
  • 2025耐磨轮胎厂家TOP5推荐:超强抓地力与持久耐用性深度
  • echart 导出图片及自定义图片名称
  • 3.1.83.2.03.3.1,Apache DolphinScheduler集群升级避坑指南
  • 2025 空气离合器生产厂家最新推荐榜:电网冲击缓解技术测评与可靠性排行,含单片多片机型及核心部件企业
  • 2025 气动离合器厂家最新推荐榜权威发布:聚焦博得 PLC 技术与新兴品牌降本优势多片式气动离合器/气动离合器电磁阀/气动离合器气缸/气动离合器摩擦片/单片式气动离合器厂家推荐
  • Unicode 编码解码工具类
  • 2025 木粉源头厂家最新推荐榜:全品类适配 / 稳定供应 / 技术赋能品牌权威解析,采购必看杂/刨花/木塑/化工/造纸/香/猫砂木粉厂家推荐
  • 读书笔记
  • 有奖话题:Data Agent for Meta 能否成为企业级 “数据大脑”?
  • 汉印打印机N41BT驱动 安装后无法打印
  • 新的练习项目
  • 2025 年塑木厂家最新推荐:实力厂家排行榜 —— 含围栏地板栈道等产品企业技术服务优势解析塑木地板/栈道/护栏/门板/凉亭/墙板/托盘厂家推荐
  • 坯子插件库 v3.2.1 for SketchUp 2022-2024下载与安装教程
  • 免费绿色版识别软件,OCR识别软件!最全安装使用教程(附下载地址)
  • 实用指南:云原生网络基础设施的核心组件Envoy
  • zookeeper常用操作 - 吾辈当奋斗
  • 基于旋转不变子空间(ESPRIT)算法的DOA估计