CallContext vs ThreadStatic

В чем разница между CallContext и ThreadStatic?

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

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


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

Ответ 1

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

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

Ответ 2

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