【发布时间】:2020-04-28 15:19:50
【问题描述】:
// Net core 3.1 Console application
class Program
{
public static void Main()
{
Environment.ExitCode = 1;
throw new Exception("boom");
}
}
以上代码导致退出代码0!
我希望它是1。
https://docs.microsoft.com/en-us/dotnet/api/system.environment.exitcode?view=netcore-3.1 表示“获取或设置进程的退出代码。”。此外,“如果 Main 方法返回 void,您可以使用该属性设置将返回给调用环境的退出代码。”
如果我删除异常抛出,退出代码是1,正如预期的那样。
我认为Environment.ExitCode 的真正意义在于指定将使用的退出代码,除非程序达到以其他方式设置的点。
如何确保退出代码不为零。虽然仍然不需要捕获所有异常?我希望异常与非零退出代码一起实际抛出,因为环境可以使用它来显示相关的错误消息。
我真的需要在捕获任何和所有异常(例如为AppDomain.CurrentDomain.UnhandledException 添加处理程序)还是能够返回我选择的退出代码之间做出选择?
【问题讨论】:
-
UnhandledException有什么不好? -
@cassandrad 如果我执行
AppDomain.CurrentDomain.UnhandledException += (s, e) => Environment.Exit(1);之类的操作,那么基本上我处理了异常并且环境(例如 kubernetes)不会看到异常消息。另外我想知道Environment.ExitCode=1有什么意义,如果我必须使用Environment.Exit(1)来确保我返回预期的退出代码。 -
kubernates 将如何处理异常消息?
Environment.Exit(1)需要立即停止进程,以防万一有可能损坏数据或其他严重错误,而return语句和Environment.ExitCode允许应用程序继续执行,但是两者可以返回不同的代码。所以Environment.Exit(1)的概念意义不同于其他两个。
标签: c# console-application exit-code .net-core-3.1