web-dev-qa-db-fra.com

Quand faut-il utiliser Environment.Exit pour mettre fin à une application console?

Je maintiens un certain nombre d'applications de console au travail et une chose que j'ai remarquée dans nombre d'entre elles est qu'elles appellent Environment.Exit (0).

Un exemple de programme ressemblerait à ceci:

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

Je ne comprends pas quelle était l'intention du programmeur original? Dans mon esprit, même sans l'instruction Environment.Exit, le programme devrait se terminer correctement. Cela dit, pour l'un de ces programmes, la fenêtre de la console est restée même après sa fermeture supposée, alors je ne suis pas vraiment sûr de ce qui se passe là-bas ...

Est-ce que j'ai râté quelque chose? Ou y a-t-il une raison pour laquelle Environment.Exit devrait être appelé dans ce cas?

30
mezoid

La seule raison pour appeler Exit() en tant que dernière ligne de la méthode Main est si d'autres threads au premier plan sont en cours d'exécution. Ils continueraient à courir si l'exécution venait à tomber de la fin de Main. Même dans ce cas, il serait généralement préférable de mettre une terminaison gracieuse explicite dans les autres threads ou d'en faire des threads d'arrière-plan.

Si vous souhaitez jamais renvoyer un code de sortie différent de Main, la méthode la plus simple consiste à le déclarer pour qu'il renvoie int.

En bref, je ne pense pas que vous ayez besoin de Environment.Exit() ici, et il vaut la peine de demander à vos collègues pourquoi ils l’utilisent - il est probable qu’ils ne pourront pas vous donner une bonne raison, et c’est un autre avantage. coupé.

49
Jon Skeet

En gros, l'instruction Environment.Exit(0) indique au système d'exploitation qu'il s'agit d'une sortie "propre". Il y a aussi d'autres nombres, chacun avec une signification différente comme Environment.Exit(1)

Cependant, une chose à noter est que le "Main" a été déclaré comme ne renvoyant rien "vide", donc le code de sortie n'aura vraiment pas de sens.

Juste au cas où vous voudriez en savoir plus sur les différents codes de sortie, regardez ici

Codes d'erreur du système

15
Anand Shah

Il s'agit de [compatibilité] pour les programmes de ligne de commande indiquant le succès ou l'échec d'un shell sous-jacent. Elle est héritée d'anciennes boucles principales de style C où le prototype de la fonction principale était

int main(void);

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

La valeur de retour de 0 signifiait traditionnellement le succès, tandis que non nulle signifiait échec ou autre chose, en fonction de la décision du programmeur.

Référence:

wiki pour plus d'informations sur la fonction main.

Documentation MSDN on Environment.Exit()

Environment.Exit (): Termine ce processus et donne le système d'exploitation sous-jacent le code de sortie spécifié.

3
Robert Paulson

Ceci est vraiment utilisé lorsque d'autres applications attendent le résultat de votre application console. Par exemple, SSRS (outil) peut lancer une application console et attend de recevoir une réponse d'échec réussie. Environment.Exit (0) renvoie un message d'exécution réussie.

0
Yongil

Dans SSIS, lorsque vous avez une tâche d'exécution de processus et que vous voulez savoir si le processus a échoué, cette méthode est utile.

0
Farshid