Разница между Environment.Exit и простой возврат 2 из Main

Извне приложения, есть ли разница между

...
Environment.Exit(2)

и

static int Main()
{
    ...
    return 2;
}

?

Ответы

Ответ 1

Самое очевидное отличие состоит в том, что вы можете вызвать Environment.Exit из любого места в вашем коде. Помимо этого:

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

Увидев обновление вопроса, я не совсем уверен, что вы имеете в виду. В обоих случаях процесс просто выйдет с кодом из 2...

Ответ 2

Environment.Exit(2) можно использовать везде. return 2 только внутри функции Main().

Ответ 3

Если вы выполняете Unit Test и вызываете Main

Program.Main(args);

то Environment.exit всегда будет отображать ошибку. Где, как использование возврата, будет работать, как и ожидалось.