CallContext против ThreadStatic
В чем различия между CallContext и ThreadStatic?
Я понял, что в среде ASP.NET данные, хранящиеся в CallContext, могут сохраняться в течение всего запроса, пока он не закончится, пока ThreadStatic может работать или не работать, поскольку запрос может переключать потоки. Я также узнал, что HttpContext хранится внутри, используя CallContext.
В обычном приложении они оба сохраняются в течение одного и того же потока вызова. Когда это не так?
Изменить: В комментариях я узнал, что контекст вызова является абстракцией над статическим хранилищем потока. Платформа ASP.NET явно перемещает данные из одного потока в другой, который обрабатывает один запрос. Другие структуры, которые хотят обеспечить гибкость потоков, могут сделать то же самое для контекстного хранения.
2 ответа
Очень часто запрос будет использовать один и тот же поток, но это не всегда так - ASP.NET демонстрирует гибкость потока. На форумах Spring.NET обсуждается очень полезная дискуссия. Это относится к глубокой статье в блоге по этому вопросу. Я подозреваю, что это более подробно, чем вы получите здесь:)
Какую противоречивую информацию вы видели из интереса?
Элементы, сохраненные как ThreadStatic, доступны для более чем одного запроса. IIS повторно использует поток после завершения запроса, чтобы обработать последующие запросы, он может даже переместить запрос из одного потока в другой во время обработки. ASP.Net очищает CallContext после каждого запроса.