当我们设置Thread CurrentCulture/CurentUICulture时,我们是否会影响ASP.NET中的多个用户?

Nik*_*lay 10 globalization asp.net-mvc localization

当我们设置CurrentCulture和/或CurrentUICulture时,我们在当前线程上执行此操作,如下所示:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

Doest这意味着我们可能会影响我们Web应用程序的多个用户的文化设置,因为他们的请求可能会重用池中的线程?

我正在开发一个ASP.NET MVC应用程序,其中每个用户可能在他/她的帐户数据中指定了自己的文化设置.当用户登录时,将从数据库中检索区域性设置,并且必须将其设置为当前区域性.

我担心的是,在当前线程上设置当前文化可能会影响重用此线程的另一个用户请求.我更关心的是读这个:

ASP.NET not only uses a thread pool, but may switch threads during request processing.

Jef*_*nal 6

Rocky Lhotka 几年前就这个问题发表了博客 - 据报道Scott Guthrie告诉他:

ASP.NET确保即使它们切换您的线程,原始线程中的CurrentPrincipal和culture属性也会转移到新线程.这是自动的,您无需担心丢失这些值.呼!

但是,线程本地存储不会继续.

本文包含更多有趣的材料(他概述了ASP.NET 切换线程的情况 - 至少截至2006年),这绝对值得一读.不幸的是,Rocky没有提供权威来源的链接.Reflector在这里也没有太大帮助,因为所有相关方法都以本机调用终止.

话虽如此,它是有道理的:API强烈暗示当前文化是跨越上下文切换,如当前主体,我从未见过ASP.NET与预期行为相矛盾.