Мы затрагиваем несколько пользователей в ASP.NET, когда мы устанавливаем Thread CurrentCulture/CurentUICulture?

Когда мы устанавливаем CurrentCulture и/или CurrentUICulture, мы делаем это в текущем потоке следующим образом:

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

Сделайте это, мы можем повлиять на настройки культуры нескольких пользователей нашего веб-приложения, так как их запросы могут повторно использовать потоки из пула?

Я работаю над приложением ASP.NET MVC, где каждый пользователь может иметь собственную настройку культуры, указанную в его/ее данных учетной записи. Когда пользователь входит в систему, настройка культуры извлекается из базы данных и должна быть установлена ​​как текущая культура.

Мое беспокойство заключается в том, что установка текущей культуры в текущем потоке может повлиять на другой пользовательский запрос, повторно использующий этот поток. Я еще больше заинтересован в этом:

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

Ответ 1

Rocky Lhotka блог об этом самом вопросе несколько лет назад - и сообщил, что Скотт Гатри сказал ему это:

ASP.NET гарантирует, что даже если они переключите свою нить, Текущая премия и культура свойства из исходной резьбы переносите в новую нить. Эта автоматически, и вам не нужно беспокоиться о потере этих ценностей. Уф!

Однако локальное хранилище потоков не переносится вперед.

В статье содержится более интересный материал (он описывает обстоятельства, в которых ASP.NET переключит потоки - по крайней мере, с 2006 года), и это определенно стоит прочитать. К сожалению, Rocky не предоставляет ссылку на авторитетный источник. Отражатель здесь не очень помогает, так как все соответствующие методы заканчиваются в естественных вызовах.

Сказав это, это имеет смысл: API сильно подразумевает, что текущая культура переносится через коммутаторы контекста, такие как текущий директор, и я никогда не видел, чтобы ASP.NET противоречила ожидаемому поведению.

Ответ 2

В стандартном ASP.NET я использовал поля страницы UICulture and Culture. Контексты потоков затем изменяются, так как в потоке выполняются разные части запроса.

Говоря, что я не знаком с тем, как MVC управляет им, но я считаю, что он должен применяться в представлении, и учитывая, что представления - это страницы просмотра, которые наследуются со страницы, они будут иметь UICulture и Culture как по стандарту ASP.NET...

Говоря все это, не принимайте это как Евангелие, как я уже сказал, я не много сделал с ASP MVC...