Asp.net mvc3 запрашивать сходство потоков

Я использую собственный механизм IoC в моем приложении asp.net mvc3 (на IIS7), который сохраняет состояние в полях [ThreadStatic] и поэтому полагается на предположение, что HttpApplication.BeginRequest, HttpApplication.EndRequest и все синхронное выполнение (один) запрос, к которому они относятся, выполняются в одном и том же потоке.

Правильно ли это предположение?

Ответ 1

Правильно ли это предположение?

Нет, это предположение неверно и там доказательства для этого. Единственный надежный механизм хранения запросов в ASP.NET - HttpContext.Items.

Никогда не используйте поля [ThreadStatic] для хранения значений для каждого запроса в приложении ASP.NET. Например, если у вас есть асинхронный контроллер, вы можете очень хорошо заставить двигатель сделать один запрос из пула потоков, чтобы начать обслуживать запрос, а затем инициировать асинхронную операцию, основанную на IOCP (порт завершения ввода-вывода) и, наконец, нарисовать другой поток из пул, чтобы завершить запрос. Таким образом, у вас может быть 2 разных потока, обслуживающих один и тот же HTTP-запрос.

Абсолютно никогда не полагайтесь на то, что HTTP-запрос будет обслуживаться одним и тем же потоком.

Это может быть правдой в некоторых случаях для синхронных запросов, но помните, что это всего лишь деталь реализации. Это может измениться без какого-либо уведомления с одной версии .NET на другую. Вы никогда не должны полагаться на него и никогда не использовать [ThreadStatic] в ASP.NET. Это может сильно укусить вас.