Asp.net mvc 在ASP.NET MVC中使用线程设置当前区域性

Asp.net mvc 在ASP.NET MVC中使用线程设置当前区域性,asp.net-mvc,multithreading,iis,iis-7,thread-safety,Asp.net Mvc,Multithreading,Iis,Iis 7,Thread Safety,SetCulture属性的一个示例,其内部执行以下操作: public void OnActionExecuting(ActionExecutingContext filterContext) { string cultureCode = SetCurrentLanguage(filterContext); if (string.IsNullOrEmpty(cultureCode)) return; HttpCo

SetCulture属性的一个示例,其内部执行以下操作:

    public void OnActionExecuting(ActionExecutingContext
        filterContext)
    {
        string cultureCode = SetCurrentLanguage(filterContext);

        if (string.IsNullOrEmpty(cultureCode)) return;

        HttpContext.Current.Response.Cookies.Add(
            new HttpCookie("Culture", cultureCode)
            {
                HttpOnly = true,
                Expires = DateTime.Now.AddYears(100)
            }
        );

        filterContext.HttpContext.Session["Culture"] = cultureCode;

        CultureInfo culture = new CultureInfo(cultureCode);
        System.Threading.Thread.CurrentThread.CurrentCulture =
            culture;
        System.Threading.Thread.CurrentThread.CurrentUICulture =
            culture;
    }

我想知道这对一个有多个用户登录并且每个用户都设置自己的文化的站点有什么影响?关于站点正在运行的IIS工作进程(w3wp),此处线程的作用域是什么?

它与普通Asp.Net完全相同。该线程从头到尾用于该请求,然后被有效地丢弃(如果您想学究化,底层平台线程会停留一段时间)


因此,多个用户不会受到影响——因为每个用户都有自己的并发线程——我在一些网站上做了完全相同的事情(包括一个经常在几个小时内被成千上万的独立访问者访问的网站),而且总是很好。

基于以下文章,我对公认的答案提出质疑。更改当前线程的区域性假定线程和请求之间存在类似的生命周期,但情况似乎并非如此,至少并非所有场景都如此。因此,你可能有问题,也可能没有问题。请检查下面的文章


该线程位于线程池中,因此它实际上是重复使用而不是丢弃的。只要您总是在每个请求上设置区域性(例如,通过使用全局筛选器),那么用户的区域性将是相同的。