Когда следует использовать Environment.Exit для завершения консольного приложения? - PullRequest
32 голосов
/ 28 марта 2009

Я поддерживаю несколько консольных приложений на работе, и в некоторых из них я заметил, что они вызывают Environment.Exit (0).

Пример программы будет выглядеть так:

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

Я не понимаю, каково было намерение исходного программиста сделать это? На мой взгляд, даже без оператора Environment.Exit программа должна нормально завершиться. Тем не менее, для одной из этих программ ее консольное окно осталось даже после того, как оно должно было закрыться, поэтому я действительно не уверен, что там происходит ....

Я что-то здесь упускаю? Или есть причина, по которой Environment.Exit должен вызываться в этом случае?

Ответы [ 5 ]

53 голосов
/ 28 марта 2009

Единственная причина вызова Exit() в качестве последней строки метода Main состоит в том, что могут быть запущены другие потоки переднего плана. Они бы продолжали бежать, если бы казнь упала до конца Main. Даже в этом случае, как правило, было бы лучше добавить какое-либо явное грациозное завершение в другие потоки или сделать их фоновыми потоками для начала.

Если вы когда-нибудь захотите вернуть другой код выхода из Main, проще всего добиться этого, объявив его возвращающим int.

Короче говоря, я не думаю, что вам нужно Environment.Exit() здесь, и стоит спросить ваших коллег, почему именно они его используют - скорее всего, они не смогут дать вам вескую причину, и это другая немного пуха, который вы можете вырезать.

15 голосов
/ 28 марта 2009

В основном, выражение Environment.Exit(0) сообщает операционной системе, что это «чистый» выход. Есть и другие числа, каждое из которых имеет различное значение, например Environment.Exit(1)

Однако следует отметить, что «Main» был объявлен как «ничего не возвращающий», поэтому код выхода не будет иметь никакого значения.

На всякий случай, если вы хотите узнать больше о различных кодах выхода, посмотрите здесь

Коды системных ошибок

3 голосов
/ 28 марта 2009

Это [совместимость] для программ командной строки, указывающая на успех или неудачу в базовой оболочке, и она наследуется от более старых основных циклов в стиле C, где прототип основной функции был

int main(void);

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

Возвращаемое значение 0 традиционно означало успех, в то время как ненулевое значение означало сбой или что-то еще, в зависимости от того, что решил программист.

Ссылка

wiki для получения дополнительной информации о функции main.

Документ MSDN в Environment.Exit()

Environment.Exit (): завершает этот процесс и дает лежащая в основе операционной системы указанный код выхода.

0 голосов
/ 24 июля 2016

В SSIS, когда у вас есть задача «Выполнить процесс» и вы хотите узнать, произошел ли сбой процесса, этот метод полезен.

0 голосов
/ 04 мая 2016

Это действительно используется, когда другие приложения ждут результатов вашего консольного приложения. Например, SSRS (инструмент) может запускать консольное приложение и ожидает возврата успешного ответа об ошибке. Environment.Exit (0) отправляет обратно сообщение об успешном выполнении.

...