Der Unterschied zwischen Join und der Suche nach ThreadState
ist, dass Join
eine blockierende Operation ist. Die Funktion kehrt erst zurück, wenn das Zeitlimit erreicht ist oder das Ziel Thread
abgeschlossen ist. Das Überprüfen der ThreadState
ist eher eine Spähoperation.
Thread.join wartet auf den Abschluss des Threads. ThreadState gibt Ihnen nur einen Schnappschuss des Threads und kehrt ohne Warten zurück. Es gibt auch eine Variante von Thread.join, die eine Wartezeit braucht. ThreadState und Join sind sehr unterschiedlich und ich denke nicht, dass beide austauschbar verwendet werden können.
Probieren Sie einen Test aus, bei dem Sie beide Aufrufe eines Threads mit einer Endlosschleife ausführen.
Wenn Sie Thread.Join()
aufrufen, wird der aufrufende Thread blockiert, bis der Thread mit der Join-Methode abgeschlossen ist. Wenn es abgebrochen wird oder erfolgreich abgeschlossen wurde, blockiert Join (), das folgt, den aufrufenden Thread nicht. Dies ermöglicht Ihnen, 10 Worker-Threads und einen Haupt-Thread zu verwenden, die nach Abschluss aller 10 Threads ausgeführt werden müssen. So können Sie Join () für den ersten Thread aufrufen. Dieser Aufruf blockiert den Hauptthread, bis der erste Arbeitsthread abgeschlossen ist. Danach können Sie Join () im zweiten Thread usw. aufrufen, bis Sie zu Thread # 10 gelangen. Wenn Sie Join () aufrufen und der Hauptthread fortgesetzt wird, können Sie sicher sein, dass alle 10 abgeschlossenen Threads und der Hauptthread den Vorgang fortsetzen können.
Zum Beispiel:
%Vor% Andererseits gibt Thread.ThreadState
nur den Thread-Status zurück (Aborted, Running, ...) ohne den Zustand des aufrufenden Threads zu beeinflussen (nicht als Join, der den aufrufenden Thread in den Zustand WaitSleepJoin versetzt). Dies ist also nur nützlich, wenn Sie überprüfen möchten, was mit dem Thread passiert, damit Sie eine bestimmte Aktion ausführen können oder Sie Ihren eigenen Join-Mechanismus implementieren möchten und so weiter ...
Tags und Links .net c# multithreading