2010-09-05 6 views
6

MSDN, sowie viele andere Quellen, behaupten, dass Worker-Threads im Thread-Pool immer Hintergrund sind.Thread-Pool und .IsBackground in .NET

"Thread-Pool-Threads sind Hintergrund Threads." (MSDN)

"gepoolte Threads sind immer Hintergrund Threads." (Threading in C#, Joseph Albahari)

ich leicht den Worker-Thread nicht-Hintergrund, indem machen kann

Thread.CurrentThread.IsBackground = false; 

und die Anwendung wird, bis der Thread beendet warten.

Was ist daran falsch?

Antwort

5

Wann endet das Gewinde? Wann endet deine Methode? Ich bezweifle sehr, dass das der Fall ist. Der springende Punkt des Thread-Pools ist, dass er nach der Fertigstellung des Threads wieder in den Pool zurückgelegt wird. Jetzt haben Sie einen Thread losgelassen, er ist zurück in den Thread-Pool gegangen und Ihre Anwendung läuft noch, weil es ein Vordergrund-Thread ist. Es gibt keine Möglichkeit, diesen Thread wieder zu entfernen, um ihn zu töten.

+0

Vielen Dank. Ich verstehe Probleme, die dadurch verursacht werden, dass Pool-Thread nicht-Hintergrund erstellt wird. Mein Punkt ist, warum der Rahmen dies nicht auf offensichtliche Weise verbietet? Ich habe eine Ausnahme erwartet, um ehrlich zu sein. Trotzdem danke. –

10

Ja, Sie können ändern Sie sie. Aber Sie sollten nicht.

Aus denselben Gründen malt man kein geliehenes Auto neu. Gleiches gilt für andere Thread-Eigenschaften wie Priorität und MTA.

Wenn Sie eine andere Art von Thread möchten, erstellen Sie Ihre eigenen.

3

Thema Poolthreads sind Hintergrund-Threads

diesen Satz beenden mit "sie haben ihre IsBackground Eigenschaft auf True initialisiert, im Gegensatz zu Threads mit der Thread-Klasse erstellt."

Die Einstellung auf false könnte ein bisschen riskant sein. Threadpool-Threads werden wiederverwendet. Ich bin mir nicht sicher, ob die Eigenschaft neu initialisiert wird. Es ist keine Eigenschaft, die mit dem physischen Betriebssystemthread verknüpft ist, sie haben kein IsBackground-Verhalten, sie werden vom Wrapper hinzugefügt, den die CLR umgibt. Also wahrscheinlich ja. Kleiner Grund, sich damit anzumessen.