In einer single-threaded Konsole-Anwendung verwenden Menschen oft Thread.Sleep
als eine faule Möglichkeit, die Anwendung für einige Zeit zu pausieren.Blockiert Sleep den Programm-Exit? Wie wird es umgesetzt?
Diese Frage aufgeworfen, interessante Punkte über diesen Ansatz nicht verwenden: Why is Thread.Sleep so harmful
jedoch außer, dass der Schlaf blockiert den aktuellen Thread zu wissen, ich verstehe nicht, wie es funktioniert - zum Beispiel tut es max aus dem CPU-Kern in eine enge Schleife oder pausiert es eigentlich den Faden?
Noch wichtiger für mich, wie reagiert eine Konsolen-App auf verschiedene App-Exit-Szenarien (STRG-C, Kill, Fenster schließen Schaltfläche), wenn mitten in einem Schlaf gefangen? Wird es blind weiter ausgeführt, bis das Betriebssystem es tötet, oder wird es sich gut verhalten?
es einfach die Thread-Scheduler des Betriebssystems weist den Thread für die Ausführung für die angegebene Zeitspanne nicht neu planen. So sicher ist es "pausiert". Konsolen-Kills werden vom Betriebssystem implementiert und beenden den Prozess einfach. Was auch immer die Fäden in dem Prozess tun, ist nicht relevant, sie hören auf, norwegischer Papageienstil zu sein. –
Für Interessierte können Sie die [Implementierung für 'Thread.Sleep()' hier] (http://referencesource.microsoft.com/#mscorlib/system/threading/thread.cs5f1072b92dae1dd8) sehen. –
Danke @HansPassant 'suspended' ist der Begriff, den ich wollte - wie Sheeo ausdrücklich darauf hinweist, dass der Thread suspendiert ist, anstatt zu Spin-Lock zu führen. Nizza MP Referenz. –