Single-threaded Apartments vs multi-threaded Apartments [duplicado]
-
20-08-2019 - |
Pergunta
Duplicate possíveis:
Poderia explicar STA e MTA?
tópicos Todos ThreadPool estão no apartamento multithreaded.
- De acordo com a MSDN
O que isso significa? Estou realmente preocupado com o que a diferença entre multi vs único modelo de rosca apartamento é. Ou o que é que o modelo de apartamento significa? Eu li o MSDN sobre ele, e ele realmente não faz sentido para mim. Eu acho que pode ter uma idéia, mas eu estava pensando que alguém aqui poderia explicar isso na planície Inglês.
Obrigado, Anthony D
Update 1
Encontrei este Poderia explicar STA e MTA?
Alguém pode ser mais descritivo?
Update 2
Também estou procurando uma resposta sobre como isso se aplica ao pool de threads, eo que eu preciso tomar cuidado para por causa disso.
Solução
STA (apartamento single-threaded) e MTA (multi-threaded apartment) têm a ver com COM . componentes COM pode ser projetado para ser acessado por um único segmento, caso em que eles são hospedados em uma STA , ou eles podem ser feitos rosca internamente seguro, e hospedado em uma MTA . Um processo pode ter apenas um MTA, mas muitos STAs. Se você está indo só para consumir componentes COM tudo o que você realmente precisa saber é que você tem que coincidir com o apartamento para o componente ou coisas desagradáveis ??vai acontecer.
Outras dicas
Na realidade, STAs e MTAs ter um impacto sobre o código .NET. Veja blog de Chris Brumme de maneira mais detalhes, então você provavelmente precisa:
https://devblogs.microsoft.com/ cbrumme / apartamentos-and-bombeando-in-the-clr /
É muito importante entender como STAs bomba mensagens em .NET. Ela tem consequências.
Se o objeto COM precisa acreditar que é em um ambiente single-threaded, STA uso. Está garantido que a criação e todas as chamadas serão feitas pelo mesmo thread. Você pode usar com segurança armazenamento local de thread e você não precisa usar seções críticas.
Se o objeto COM pode ser acessado por muitos threads simultaneamente, use MTA -. Não haverá guardas colocar no lugar
Como outros apontaram, ele geralmente tem pouco impacto sobre aplicações .NET.
No entanto, estar ciente de que o anfitrião teste Microsoft usado para testes de unidade é realmente implementado em um STA, o que significa que há limitações sobre o que você pode fazer em teste de unidade. Por exemplo, você não pode fazer um WaitAll
em um WaitHandle
em um teste de unidade é que você está usando anfitrião teste da Microsoft.
Você não tem que se preocupar com isso, a menos que você está fazendo COM-interoperabilidade, caso em que há problemas de triagem. Ele não tem ramificações para .net em si.