CallContext против ThreadStatic - PullRequest
48 голосов
/ 07 ноября 2008

Чем отличаются CallContext от ThreadStatic?

Я понял, что в среде ASP.NET данные, хранящиеся в CallContext, могут сохраняться в течение всего запроса, пока он не закончится, пока ThreadStatic может работать или не работать, поскольку запрос может переключать потоки. Я также узнал, что HttpContext хранится внутри, используя CallContext.

В обычном приложении они оба сохраняются в течение одного и того же потока вызова. Когда это не так?


Редактировать: В комментариях я узнал, что контекст вызова является абстракцией над статическим хранилищем потока. Платформа ASP.NET явно перемещает данные из одного потока в другой, который обрабатывает один запрос. Другие структуры, которые хотят обеспечить гибкость потоков, могли бы сделать то же самое для контекстного хранения.

Ответы [ 2 ]

33 голосов
/ 07 ноября 2008

Очень часто запрос использует один и тот же поток, но это не всегда так - ASP.NET демонстрирует гибкость потока . Об этом действительно полезно поговорить на форумах Spring.NET . Это относится к глубокой статье в блоге по этому вопросу . Я подозреваю, что это более подробно, чем вы получите здесь:)

Какую противоречивую информацию вы видели из интереса?

13 голосов
/ 07 ноября 2008

Элементы, сохраненные как ThreadStatic, доступны для более чем одного запроса. IIS повторно использует поток после завершения запроса, чтобы обработать последующие запросы, он может даже переместить запрос из одного потока в другой во время обработки. ASP.Net очищает CallContext после каждого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...