C# Thread.CurrentCulture是否未保存到实例变量?

C# Thread.CurrentCulture是否未保存到实例变量?,c#,multithreading,debugging,asp.net-mvc-4,localization,C#,Multithreading,Debugging,Asp.net Mvc 4,Localization,如您所见,我试图将线程的CurrentCulture捕获到一个实例变量中,以便在整个类中重用它,但它不是持久的。在上面的照片中,我展示了即使分配了它,值仍然是不同的。为什么会这样?可能有两个原因导致这种情况发生 PickLanguage方法正在具有不同区域性的不同线程上执行 线程的文化发生了变化 这两种情况都会导致缓存区域性与当前区域性不同。一般来说,缓存名为Current的值是危险的,因为这表示它们可以并且将要更改您所说的“不持久”是什么意思?存储的值是否已更改?我的意思是,它在构造函数调


如您所见,我试图将线程的CurrentCulture捕获到一个实例变量中,以便在整个类中重用它,但它不是持久的。在上面的照片中,我展示了即使分配了它,值仍然是不同的。为什么会这样?

可能有两个原因导致这种情况发生

  • PickLanguage
    方法正在具有不同区域性的不同线程上执行
  • 线程的文化发生了变化

这两种情况都会导致缓存区域性与当前区域性不同。一般来说,缓存名为
Current
的值是危险的,因为这表示它们可以并且将要更改

您所说的“不持久”是什么意思?存储的值是否已更改?我的意思是,它在构造函数调用和操作调用之间没有持久化。您有什么建议使此线程安全吗?我假设这是控制器类固有的。例如,如果我们将其移动到一个单独的命令类中,这难道不能确保它在同一个线程上运行吗?@sinas美感这不是真正的线程安全问题,更多的是缓存策略问题。我的建议是不要缓存该值。或者只在方法开始时本地缓存,而不是在type@Sinaesthetic我不确定线程问题来自哪里-您的代码没有显示任何。。。作为预防措施-不要在操作中手动创建线程,您的生活应该会更好。。。考虑使用异步支持——当前上下文将被携带到新线程……@ JRADDPAR FWW,我试图把逻辑移到它自己的命令类中,然后再试一次,它工作了。因此,这是一个线程问题,似乎与框架对控制器多线程的控制有关。@sinas美感-那么线程问题从何而来?除非您使用async,否则控制器将被创建并在整个请求的单个线程上工作,而其他请求的控制器的其他唯一实例将在单独的线程上运行,并拥有所有
.CurrentXXXX
对象的副本。。。