Environment.Exit 和 Main 的简单返回 2 之间的区别

Posted

技术标签:

【中文标题】Environment.Exit 和 Main 的简单返回 2 之间的区别【英文标题】:Difference between Environment.Exit and simple return 2 from Main 【发布时间】:2009-09-24 07:26:38 【问题描述】:

从应用程序之外,有什么区别

...
Environment.Exit(2)

static int Main()

    ...
    return 2;

?

【问题讨论】:

【参考方案1】:

最明显的区别是您可以从代码中的任何位置调用 Environment.Exit。除此之外:

如果有其他前台线程在执行,主整理不会终止进程; Environment.Exit 无论如何都会取消这个过程。 Environment.Exit 终止进程 不展开堆栈并执行 finally 块(至少根据我的实验)。显然,当您从 Main 返回时,就托管代码而言,您已经处于顶层。 两者都让终结者有机会在进程真正关闭之前执行 Environment.Exit 需要适当的安全权限,因此不适用于可信度较低的应用。

看到问题更新后,我不完全确定您的意思。在这两种情况下,进程都会以 2 的代码退出...

【讨论】:

请参阅***.com/questions/713805/net-finalizers-and-exit0,了解有关流程结束时完成的详细信息。【参考方案2】:

Environment.Exit(2) 可以在任何地方使用。 return 2 仅在 Main() 函数内。

【讨论】:

更新问题 - 与应用程序外部有什么不同吗?【参考方案3】:

如果您正在执行单元测试并调用 Main

Program.Main(args);

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

【讨论】:

以上是关于Environment.Exit 和 Main 的简单返回 2 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Environment.Exit 没有关闭[重复]

在 Environment.Exit() 上捕获异常

System.Environment.Exit(0) 不退出程序

Winforms:Application.Exit vs Environment.Exit vs Form.Close

当未使用 Environment.Exit() 时,.net 程序可以具都有哪些退出代码?

在 C# 中测试 Environment.Exit()