Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When should one use Environment.Exit to terminate a console application?

I'm maintaining a number of console applications at work and one thing I've been noticing in a number of them is that they call Environment.Exit(0).

A sample program would look like this:

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

I don't understand what the intent of the original programmer was in doing this? In my mind even without the Environment.Exit statement the program should exit just fine. That said, for one of these programs, it's console window has been remaining even after it was supposed to have closed so I'm really not sure what's going on there....

Am I missing something here? Or is there a reason why Environment.Exit should be called in this instance?

like image 794
mezoid Avatar asked Mar 28 '09 06:03

mezoid


2 Answers

The only reason for calling Exit() as the last line of the Main method is if there might be other foreground threads running. They would stay running if execution just fell off the end of Main. Even in this case, it would usually be a better idea either to put in some explicit graceful termination into the other threads - or make them background threads to start with.

If you ever want to return a different exit code from Main, the simpler way to achieve that is to declare it to return int.

In short, I don't think you need Environment.Exit() here, and it's worth asking your colleagues exactly why they're using it - chances are they won't be able to give you a good reason, and it's another bit of fluff you can cut out.

like image 118
Jon Skeet Avatar answered Sep 19 '22 12:09

Jon Skeet


Basically, the statement Environment.Exit(0) tells the operating system that this is a "clean" exit. There are other numbers as well, each with a different meaning like, Environment.Exit(1).

However, one thing to note is that the "Main" has been declared as returning nothing "void", so the exit code will really not have a meaning to it.

Just in case you wanted to know more about the different exit codes, have a look here:

System Error Codes (0-499)

like image 37
Anand Shah Avatar answered Sep 21 '22 12:09

Anand Shah