Try / Catch,Windows服务和Environment.Exit

时间:2015-03-01 16:33:03

标签: c# azure windows-services windows-server-2012-r2

我在Windows Azure Server 2012 R2 VM上的Windows服务应用程序中发现了非常有趣的行为。我的Windows服务打电话,

ThreadPool.QueueUserWorkItem((_) => DoWork());

在DoWork中,

    private static void DoWork()
    {
        try
        {
            // Do all work
            Environment.Exit(0);
        }
        catch (Exception ex)
        {
            Logger.Log(ex);
        }
    }

Environment.Exit(0)的调用导致进程崩溃。没有登录事件查看器,也没有进一步的信息。只需process unexpectedly terminated。为什么尝试/ catch不在那里工作?这是Windows服务应用程序的预期行为。

1 个答案:

答案 0 :(得分:2)

  

为什么try / catch不能在那里工作?

根据MSDN

  

如果从try或finally块调用退出,则任何catch中的代码   块不执行。

@RufusL说你不应该那样关闭你的应用程序。

也许有一种更优雅的方式来关闭你的应用。 也许,也许,召集一个结束事件或者你可以尝试删除Environment.Exit(0)代码和'让事情成为':D