wake-up-neo.com

Wann sollte man mit Environment.Exit eine Konsolenanwendung beenden?

Ich verwalte eine Reihe von Konsolenanwendungen bei der Arbeit und eine Sache, die ich bei einer Reihe von ihnen bemerkt habe, ist, dass sie Environment.Exit (0) aufrufen.

Ein Beispielprogramm würde so aussehen:

public class Program
{
    public static void Main(string[] args)
    {
        DoStuff();
        Environment.Exit(0);
    }
}

Ich verstehe nicht, was die Absicht des ursprünglichen Programmierers war, dies zu tun? In meinen Augen sollte das Programm auch ohne die Anweisung von Environment.Exit problemlos beendet werden. Das heißt, für eines dieser Programme ist das Konsolenfenster auch dann noch vorhanden, nachdem es geschlossen werden sollte. Ich bin mir also nicht sicher, was dort vorgeht ...

Fehlt mir hier etwas? Oder gibt es einen Grund, warum Environment.Exit in diesem Fall aufgerufen werden sollte?

30
mezoid

Der einzige Grund, Exit() als letzte Zeile der Main-Methode aufzurufen, ist, wenn möglicherweise andere Vordergrund-Threads ausgeführt werden. Sie würden weiterlaufen, wenn die Ausführung am Ende von Main ablief. Selbst in diesem Fall ist es normalerweise eine bessere Idee, entweder die anderen Threads explizit zu beenden oder sie als Hintergrund-Threads zu verwenden.

Wenn Sie jemals einen anderen Exit-Code von Main zurückgeben möchten, ist der einfachere Weg, dies zu erreichen, die Deklaration von int.

Kurz gesagt, ich denke nicht, dass Sie hier Environment.Exit() brauchen, und es lohnt sich, Ihre Kollegen genau zu fragen, warum sie sie verwenden. Die Chancen stehen gut, dass sie Ihnen keinen guten Grund geben werden ausgeschnitten.

49
Jon Skeet

Grundsätzlich teilt die Anweisung Environment.Exit(0) dem Betriebssystem mit, dass es sich um einen "sauberen" Exit handelt. Es gibt auch andere Zahlen, die jeweils eine andere Bedeutung haben wie Environment.Exit(1)

Zu beachten ist jedoch, dass für das "Main" nichts als "leer" zurückgegeben wurde. Daher hat der Exit-Code wirklich keine Bedeutung.

Für den Fall, dass Sie mehr über die verschiedenen Exit-Codes erfahren möchten, schauen Sie hier

System Fehlercodes

15
Anand Shah

Dies ist [Kompatibilität] für Befehlszeilenprogramme, um den Erfolg oder Misserfolg einer zugrunde liegenden Shell anzuzeigen, und wird von älteren Hauptschleifen im C-Stil übernommen, in denen der Prototyp der Hauptfunktion war

int main(void);

int main(int argc, char *argv[]);

Der Rückgabewert von 0 bedeutete traditionell Erfolg, während Nicht-Null Fehler oder etwas anderes bedeutete, je nachdem, was der Programmierer entschied.

Referenz:

wiki Weitere Informationen zur Funktion main.

MSDN-Dokumentation on Environment.Exit()

Environment.Exit (): Beendet diesen Prozess und gibt die zugrunde liegendes Betriebssystem das angegebener Beendigungscode.

3
Robert Paulson

Dies wird wirklich verwendet, wenn andere Anwendungen auf das Ergebnis Ihrer Konsolen-App warten. Zum Beispiel kann SSRS (Tool) eine Konsolenanwendung starten und wartet, bis die Antwort auf einen Fehler erfolgreich ist. Das Environment.Exit (0) sendet eine erfolgreiche Ausführungsnachricht zurück.

0
Yongil

In SSIS ist diese Methode hilfreich, wenn Sie über eine Task zum Ausführen des Prozesses verfügen und wissen möchten, ob der Prozess fehlgeschlagen ist.

0
Farshid

Im .net-Core muss ab sofort Environment.Exit, um das Programm auf dem Mac zu beenden. Die reine Rückkehr von main stoppt den Prozess nicht und läuft weiter, bis der Benutzer ihn abbricht. Muster wie:

public class Program
{
    public static void Main(string[] args)
    {
        Environment.Exit(TryRun(args));
    }
}

sind an meinem Arbeitsplatz üblich, da wir sowohl für Windows als auch für Mac liefern möchten.

0
Czipperz