【发布时间】:2014-08-21 17:28:10
【问题描述】:
我有一个 .NET MVC/WebApi 应用程序,它在 ASP.NET AcquireRequestState 事件期间为当前线程设置文化(我们使用自定义逻辑来确定每个用户的首选 ui 文化)。虽然这适用于同步情况,但我担心它在使用异步或显式多线程或后台线程(例如使用 Task.Run())时不起作用。
与随逻辑控制流流动的 Thread.CurrentPrincipal 不同,文化似乎只是随线程流动:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(FigureOutUsersCulture());
Task.Run(() => Thread.CurrentThread.CurrentUICulture.Dump()); // en-US
为此类应用程序设置文化的最可靠方法是什么?
注意:对于任何要求使用 async/await 或其他线程的开发人员记住初始化文化的答案,我并不感到兴奋。如果可能的话,我想要跨 async/await 的强大功能。如果这真的不可能,我当然也会接受这个答案。
编辑: 我知道如果您在请求线程期间不等待任务,则使用 Task.Run() 在 ASP.NET 中会出现问题。也就是说,我正在尝试编写基础架构,以便以最强大的方式进行设置。我不知道其他开发者会做什么,所以如果我能做好准备,我愿意。
编辑: 关于已发布的“可能重复”的注释。我同意这两个问题是相关的,但它们并不相同!有人询问为整个应用程序设置一种文化,这与我正在尝试做的相反。另一个解决了 MVC3 风格的异步控制器的设置文化,这是我想要完成的一小部分(而且,对我来说,很大程度上不相关)。
【问题讨论】:
-
您根本不应该在 ASP.NET 中使用
Task.Run。您使用的是哪个 .NET Framework 版本? -
@SteveCzetty:查看我的编辑。我认为我的问题更广泛
-
@HamletHakobyan:查看我的编辑;我觉得我的问题有点不同。
-
@EugenePodskal:你能解释一下为什么你认为我的问题是重复的吗?两个链接的问题都不一样!
标签: c# asp.net .net multithreading cultureinfo