Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Try/Catch、Windows服务和环境。退出_C#_Azure_Windows Services_Windows Server 2012 R2 - Fatal编程技术网

C# Try/Catch、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);

我在WindowsAzure Server 2012 R2虚拟机上的windows服务应用程序中发现了非常有趣的行为。我的windows服务

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我不懂你的话