Environment.Exit和从Main中简单返回2的区别

20

从应用程序外部来看,这两者有什么区别:

...
Environment.Exit(2)

并且

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

?

3个回答

21
最明显的区别是你可以从代码中的任何位置调用 Environment.Exit。除此之外,还有以下区别:
  • 如果有其他前台线程正在执行,主函数完成不会终止进程;而 Environment.Exit 无论如何都会关闭进程。
  • Environment.Exit 终止进程时不会解开堆栈并执行 finally 块(至少在我的实验中是这样)。显然,当你从 Main 返回时,就已经处于托管代码所关心的最高级别了。
  • 两者在进程“真正”关闭之前都会给终结器一个执行的机会。
  • Environment.Exit 需要适当的安全权限,因此对于不受信任的应用程序可能无法运行。

看到问题更新后,我不是很确定你的意思。在两种情况下,进程都将以代码 2 退出...


参见 https://dev59.com/KUfRa4cB1Zd3GeqP6Rov 了解进程结束时的终结处理的详细信息。 - David Schmitt

8

Environment.Exit(2) 可以在任何地方使用。而 return 2 只能在 Main() 函数中使用。


更新的问题 - 在应用程序外有任何区别吗? - Konstantin Spirin

2

如果您正在进行单元测试且调用Main函数

Program.Main(args);

使用Environment.exit将始终反映失败,而使用return将按预期工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接