使用 Environment.ExitCode 与从 Main 返回 int

Posted

技术标签:

【中文标题】使用 Environment.ExitCode 与从 Main 返回 int【英文标题】:Using Environment.ExitCode versus returning int from Main 【发布时间】:2011-03-09 22:38:38 【问题描述】:

我打算在我的一个 shell 脚本中使用 C# 可执行文件的返回码。我有两个选择:

从 main 方法返回一个 int 值

class MainReturnValTest

    static int Main()
    
        //...
        return 0;
    

(或)

使用 Environment.Exit 和退出代码

class MainReturnValTest

    static void Main()
    
        //...
        Enviroment.Exit(exitCode);
    

是否可以使用上述任何一种方式从可执行文件中返回值?还是其中一个优先于其他?

【问题讨论】:

When should one use Environment.Exit to terminate a console application?的可能重复 投了反对票,因为这个问题的标题提到了Environment.ExitCode,但问题的文本提到了Environment.Exit()。这些不是一回事。 【参考方案1】:

Environment.Exit() 是粗鲁的中止。它立即终止该过程。仅当您检测到严重故障时才使用它,例如,它适用于 AppDomain.UnhandledException 事件处理程序。当您的程序由于未处理的异常而即将终止时运行。

您的线索是:异常是发出异常情况信号的好方法,应该以非零的 ExitCode 终止程序。事实上,它会自动设置为异常的 HResult 属性值。无需代码。

【讨论】:

【参考方案2】:

如果你正在编写一个线性程序,那么从Main 返回就可以了。如果您有更复杂的逻辑,或者可能有其他执行线程,那么您可能想要使用Exit(returnCode)。这两种方式都将等同于您的 shell 脚本。

【讨论】:

除了Environment.Exit()相当于在程序还在运行的时候就给它断电。正如下一张海报所述,应不惜一切代价避免这种情况。【参考方案3】:

不同之处在于您需要根据另一个应用程序的退出状态来处理父应用程序上的事件。 Return 主要用于应用程序内,而 exit 用于突然结束应用程序。这里的退出状态可以被另一个应用程序用来决定它的下一步。

返回值用于将值返回到调用代码的另一个函数。或指示某个事件的代码执行结束。

你也可以这样看:

1) return 结束一个函数,可以是 main();退出用于结束程序。

2) 以某个返回值结束程序确实不能被另一个应用程序隐式解释,但退出状态可用于决定代码实现。

【讨论】:

以上是关于使用 Environment.ExitCode 与从 Main 返回 int的主要内容,如果未能解决你的问题,请参考以下文章

C# 彻底关闭程序,包括循环

C#winform程序卡死后 自动关闭后重启 怎么做

static与const联合使用&&extern与const联合使用

为啥将@Transactional 与@Service 一起使用而不是与@Controller 一起使用

为啥将@Transactional 与@Service 一起使用而不是与@Controller 一起使用

将 require('...') 与变量一起使用与在 webpack 中使用字符串