2010-09-05 17 views
6

MSDN, così come molte altre fonti, sostengono che i thread di lavoro nel pool di thread sono sempre in background.Pool di thread e. IsBackground in .NET

"Thread thread thread sono thread in background." (MSDN)

"I thread in pool sono sempre thread in background." (Threading in C#, Giuseppe Albahari)

posso facilmente rendere il thread di lavoro non-sfondo impostando

Thread.CurrentThread.IsBackground = false; 

E l'applicazione sarà in attesa fino al termine della discussione.

Cosa c'è di sbagliato in questo?

risposta

5

Quando termina il thread? Quando il tuo metodo finisce? Dubito fortemente che sia così. L'intero punto del pool di thread è che una volta terminato il thread, viene reinserito nel pool per essere riutilizzato. Ora hai lasciato andare un thread, è tornato nel pool di thread e l'applicazione è ancora in esecuzione perché è un thread in primo piano. Non c'è modo di recuperare quel thread per ucciderlo.

+0

Grazie. Comprendo i problemi causati dalla creazione di thread in background non in background. Il mio punto è perché il Framework non vieta di farlo in modo più ovvio? Mi aspettavo che un'eccezione fosse onesta. Comunque grazie. –

10

Sì, è possibile modificarli. Ma tu non dovresti.

Per gli stessi motivi non si ridisegna una macchina presa in prestito. Lo stesso vale per altre proprietà del thread come priorità e MTA.

Se si desidera un diverso tipo di thread, crearne uno proprio.

3

discussioni pool di thread sono thread in background

finire la frase con "hanno le loro proprietà IsBackground inizializzato True, a differenza di thread creati con la classe Thread."

Impostarlo su false potrebbe essere un po 'rischioso. I thread di Threadpool vengono riciclati, non sono sicuro che la proprietà verrà reinizializzata. Non è una proprietà associata al thread del sistema operativo fisico, non ha il comportamento di IsBackground, è aggiunta dal wrapper che il CLR mette attorno. Quindi probabilmente sì. Poca ragione per pasticciarlo però.

Problemi correlati