Es scheint anscheinend nicht viele Erklärungen zu diesem Thema zu geben, aber die Exit-Codes sollen verwendet werden, um einen Hinweis darauf zu geben, wie der Thread beendet wurde. 0
Dies bedeutet, dass er sicher beendet wurde, während alles andere bedeutet, dass dies nicht der Fall war nicht wie erwartet beenden. Aber dann kann dieser Exit-Code selbst in Code gesetzt werden, um dies vollständig zu übersehen.
Der nächste Link, den ich für weitere Informationen als nützlich erachten könnte, ist dieser
Zitat aus dem obigen Link:
Unabhängig von der Methode zum Beenden muss die Ganzzahl, die Sie von Ihrem Prozess oder Thread zurückgeben, Werte zwischen 0 und 255 (8 Bit) haben. Ein Nullwert zeigt Erfolg an, während ein Wert ungleich Null einen Fehler anzeigt. Obwohl Sie versuchen können, einen beliebigen Ganzzahlwert als Exit-Code zurückzugeben, wird nur das niedrigste Byte der Ganzzahl von Ihrem Prozess oder Thread als Teil eines Exit-Codes zurückgegeben. Die Bytes höherer Ordnung werden vom Betriebssystem verwendet, um spezielle Informationen über den Prozess zu übermitteln. Der Exit-Code ist sehr nützlich in Batch- / Shell-Programmen, die abhängig vom Erfolg oder Misserfolg eines Programms andere Programme bedingt ausführen.
Aus der Dokumentation zu GetEXitCodeThread
Wichtig Die GetExitCodeThread-Funktion gibt einen gültigen Fehlercode zurück, der von der Anwendung erst nach Beendigung des Threads definiert wird. Daher sollte eine Anwendung STILL_ACTIVE (259) nicht als Fehlercode verwenden. Wenn ein Thread STILL_ACTIVE (259) als Fehlercode zurückgibt , können Anwendungen, die auf diesen Wert testen, ihn so interpretieren, dass der Thread noch ausgeführt wird, und weiterhin nach Abschluss des Threads auf die Fertigstellung des Threads testen, wodurch der Thread gesetzt werden kann Anwendung in eine Endlosschleife.
Mein Verständnis von all dem ist, dass der Exit-Code nicht so wichtig ist, wenn Sie Threads in Ihrer eigenen Anwendung für Ihre eigene Anwendung verwenden. Die Ausnahme ist möglicherweise, wenn Sie mehrere Threads gleichzeitig ausführen, die voneinander abhängig sind. Wenn eine externe Quelle diesen Fehlercode lesen muss, können Sie ihn so einstellen, dass andere Anwendungen den Status Ihres Threads erfahren.
RunAsync().Wait();
static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }
Die Sache ist, Aufgaben werden von Thread-Pool-Threads ausgeführt und basierend auf den Heuristiken des Thread-Pools wird der Thread möglicherweise auch nach Abschluss Ihrer Aufgabe nicht beendet. Der Thread kehrt einfach zum Thread-Pool zurück und wartet darauf, mit der nächsten Aufgabe zugewiesen zu werden. Und deshalb klingt der Exit-Code STILL_ACTIVE (259) hier so intuitiv.Wie Sayse erwähnt hat der Exit-Code
259 (0x103)
eine besondere Bedeutung. In diesem Fall wird der zu debuggende Prozess noch ausgeführt.Ich habe dies häufig beim Debuggen von Webdiensten gesehen, da der Thread nach dem Ausführen jedes Webdienstaufrufs weiterhin ausgeführt wird (da er immer noch auf weitere Aufrufe wartet).
quelle
Was mir passiert ist, ist, dass ich mehrere Projekte in meiner Lösung habe. Ich wollte Projekt 1 debuggen, aber das Projekt 2 wurde als Standardstartprojekt festgelegt. Ich habe dies behoben, indem ich mit der rechten Maustaste auf das Projekt geklickt und "Als Startprojekt festlegen" ausgewählt habe. Dann ist das Ausführen des Debuggens in Ordnung.
quelle