it-swarm.com.ru

Когда следует использовать Environment.Exit для завершения консольного приложения?

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

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

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

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

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

30
mezoid

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

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

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

49
Jon Skeet

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

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

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

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

15
Anand Shah

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

int main(void);

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

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

Ссылка:

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

MSDN documenttion on Environment.Exit()

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

3
Robert Paulson

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

0
Yongil

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

0
Farshid