Разница между 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 всегда будет отображать ошибку. Где, как использование возврата, будет работать, как и ожидалось.