Frage an c#, .net, multithreading – Welchen Wert hat die ThreadState-Eigenschaft?

3

Diese Frage Ich habe über das .NET-Äquivalent nachgedacht. Welchen Wert gibt es für dieThreadState Eigentum der Thread-Klasse? In diesem Codebeispiel:

<code>if (someThread.ThreadState != System.Threading.ThreadState.Running)
{
    someThread = new Thread(SomeMethod);
    someThread.Start();
}
</code>

DassomeThread'sThreadState Eigentum könnte wechseln zuRunning zwischen denif und der Code in derif, Recht?

Deine Antwort

3   die antwort
4

die auf den ersten Blick vielversprechend aussehen. Wenn Sie sich jedoch eingehend mit den Funktionsweisen befassen, werden Sie feststellen, dass sie nahezu nutzlos sind.

Das Hauptproblem bei ThreadState ist, dass die Aufzählungsnamen sehr irreführend sind. Nehmen Sie zum Beispiel ThreadState.Runnning. Dies ist ein sehr schlechter Name, da er nicht anzeigt, dass der Thread ausgeführt wird. Stattdessen wird angezeigt, dass der Thread zu einem bestimmten Zeitpunkt in der jüngeren Vergangenheit ausgeführt wurde und möglicherweise noch ausgeführt wird oder nicht.

Das mag trivial erscheinen, ist es aber nicht. Es ist wirklich einfach, die Namen der Aufzählung wörtlich zu nehmen und erzeugt wirklich gut aussehenden Code. Der Code liest sich jedoch nicht nur, sondern basiert häufig auf fehlerhafter Logik.

Ich benutze diese Eigenschaft wirklich nur zum Debuggen.

Dieser Wert kann in sehr begrenzten Szenarien nützlich sein, in denen Sie einen anderen Mechanismus haben, der den betrachteten Thread steuert. Wie ein Schloss oder WaitHandle. In der Regel ist es jedoch besser, eine andere Form der Synchronisierung zu verwenden, als sich auf diese Eigenschaft zu verlassen.

1

um im Debugger nachzuschauen und bestimmte Arten von Blockierungs- / Synchronisierungsfehlern zu verstehen und zu debuggen. Sie können beispielsweise feststellen, ob ein bestimmter Thread im Debugger blockiert ist, indem Sie sich dies ansehen und den ThreadState auf ThreadState.WaitSleepJoin setzen.

Davon abgesehen ist es etwas, worauf ich mich fast nie verlasse. Ich hatte gemischte Ergebnisse, als ich versuchte, mit diesem Debug zu arbeiten. Im Allgemeinen denke ich, dass es am häufigsten das Beste ist, so zu tun, als ob es nicht existiert.

2

MSDN:

Wichtige Notiz:
Es gibt zwei Thread-Status-Aufzählungen: System.Threading.ThreadState und System.Diagnostics.ThreadState. Die Thread-Status-Aufzählungen sind nur in einigen Debugging-Szenarien von Interesse. Ihr Code sollte niemals den Thread-Status verwenden, um die Aktivitäten von Threads zu synchronisieren.

Ignorieren Sie ThreadState, es sei denn, Sie debuggen. Es ist keine Lösung für alles. Kevin Montrose
Warum würde ich mich dafür interessieren und was würde ich tun, um das Synchronisationsproblem zu lösen? jasonh

Verwandte Fragen