STA относится к объектам и функциям?

Мое понимание STA состоит в том, что если мой поток работает в квартире STA, мне не нужно беспокоиться о безопасности потока, и вызовы функций моего потока автоматически ставятся в очередь.

Мой вопрос заключается в том, что если я запускаю рабочий поток в STA и затем получаю объект из этого потока через функцию, нужно ли мне беспокоиться о безопасности потока при использовании этого объекта? Или вызовы функций для этого объекта поточно-ориентированы?

2 ответа

STA в основном связано с COM, и как обрабатываются объекты COM. Это автоматически не делает вещи безопасными в нормальном.NET-коде. Ничто не собирается автоматически сделать ваш.NET-код потокобезопасным.

Предполагая, что вы имеете дело только с управляемым кодом, я предлагаю вам забыть о квартирах, поскольку они вряд ли будут иметь отношение к тому, как вы пишете поточно-ориентированный код (или, действительно, хотите ли вы сделать большую часть своего кода поточно-безопасным), (Обязательная ссылка: сообщение Эрика Липперта "Что это за штука, которую вы называете потокобезопасным?").

Создание нити в STA-волшебстве не делает ничего безопасным. Маркировка потока как потока STA означает, что COM-объекты, которые требуются для запуска в потоке STA, могут быть запущены в этом потоке. Это так, что уровень COM знает, как правильно распределять вызовы.

Для краткого введения, см.:

http://blogs.msdn.com/b/ericlippert/archive/2003/09/18/53041.aspx

Другие вопросы по тегам