Domanda

  

Possibile duplicato:
   Potresti spiegare STA e MTA?

  

Tutti i thread di ThreadPool si trovano nel file   appartamento multithread.

- Come per MSDN

Cosa significa? Sono davvero preoccupato di quale sia la differenza tra il modello di appartamento multi thread vs single thread. O cosa significa il modello dell'appartamento? Ho letto il MSDN su di esso e non ha davvero senso per me. Penso di avere un'idea, ma pensavo che qualcuno qui potesse spiegarlo in un inglese semplice.

Grazie, Anthony D

Aggiornamento 1

Trovato questo Potresti spiegare STA e MTA?

Qualcuno può essere più descrittivo?

Aggiornamento 2

Sto anche cercando una risposta su come questo si applica al pool di thread e su cosa devo fare attenzione per questo.

È stato utile?

Soluzione

STA (appartamento a thread singolo) e MTA (appartamento a thread multipli) hanno a che fare con COM . È possibile progettare i componenti COM per l'accesso a un singolo thread, nel qual caso sono ospitati in un STA , oppure possono essere internamente protetti da thread e ospitati in un MTA . Un processo può avere un solo MTA, ma molti STA. Se stai solo consumando componenti COM, tutto quello che devi veramente sapere è che devi abbinare l'appartamento al componente o succederanno cose brutte.

Altri suggerimenti

In realtà, gli STA e gli MTA hanno un impatto sul codice .NET. Vedi il post sul blog di Chris Brumme per ulteriori dettagli di cui probabilmente avrai bisogno:

https://devblogs.microsoft.com/ cbrumme / appartamenti-and-pompaggio-in-the-clr /

È davvero importante capire come gli STA inviano messaggi in .NET. Ha conseguenze.

Se il tuo oggetto COM deve credere che si trova in un ambiente a thread singolo, usa STA. Hai la garanzia che la creazione e tutte le chiamate saranno effettuate dallo stesso thread. Puoi utilizzare in modo sicuro l'archiviazione locale di thread e non è necessario utilizzare sezioni critiche.

Se al tuo oggetto COM è possibile accedere da più thread contemporaneamente, usa MTA - non ci saranno protezioni messe in atto.

Come altri hanno sottolineato, generalmente ha un impatto limitato sulle applicazioni .NET.

Tuttavia, tieni presente che l'host di test Microsoft utilizzato per i test unitari è effettivamente implementato in uno STA, il che significa che ci sono limitazioni su cosa puoi fare nel test unitario. Ad esempio non è possibile eseguire un WaitAll su un WaitHandle in un unit test se si utilizza l'host di test di Microsoft.

Non devi preoccuparti a meno che tu non stia eseguendo l'interoperabilità COM, nel qual caso ci sono problemi di smistamento. Non ha ramificazioni per .net stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top