C# Try/Catch、Windows服务和环境。退出
我在WindowsAzure Server 2012 R2虚拟机上的windows服务应用程序中发现了非常有趣的行为。我的windows服务C# Try/Catch、Windows服务和环境。退出,c#,azure,windows-services,windows-server-2012-r2,C#,Azure,Windows Services,Windows Server 2012 R2,我在WindowsAzure Server 2012 R2虚拟机上的windows服务应用程序中发现了非常有趣的行为。我的windows服务 ThreadPool.QueueUserWorkItem((_) => DoWork()); 在嫁妆方面 private static void DoWork() { try { // Do all work Environment.Exit(0);
ThreadPool.QueueUserWorkItem((_) => DoWork());
在嫁妆方面
private static void DoWork()
{
try
{
// Do all work
Environment.Exit(0);
}
catch (Exception ex)
{
Logger.Log(ex);
}
}
调用Environment.Exit(0)
使进程崩溃。没有登录事件查看器,也没有其他信息。只是进程意外终止
。为什么try/catch在那里不起作用?这是Windows服务应用程序的预期行为
为什么try/catch在那里不起作用
根据,
如果从try或finally块调用Exit,则任何catch中的代码
块不执行
@RufusL说得对,你不应该那样关闭你的应用程序
也许有一种更优雅的方式来关闭你的应用程序。
例如,可能调用关闭事件,或者您可以尝试删除该
环境。退出(0)
代码并“顺其自然”:D您不应该从这样的线程关闭您的应用程序……我不会这样做。只是问为什么我的进程会崩溃,而不是关闭应用程序,因为MSDN说它将关闭应用程序。如果抛出错误,则应调用catch。@user960567请阅读我的答案。如果从try或finally块调用Exit,则不会执行任何catch块中的代码。这是无法改变的。除非你去微软告诉他们改变API的工作方式。通常情况正好相反:开发人员适应Microsoft提供的或使用的不同功能或解决方法。你不能强迫微软仅仅为你改变他们的功能。MSDN链接从来没有说如果发生异常,那么?@user960567我不懂你的话