4

我正在编写一个控制台应用程序以作为计划任务运行,当您使用关闭按钮关闭它时,它似乎没有执行运行代码的 finally 块。我尝试使用以下非常简单的控制台应用程序复制此行为:

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Thread.Sleep(60000);
            }
            finally
            {
                Console.WriteLine("Finally");
            }
        }
    }
}

当通过调试器运行时,这不会Console.WriteLine在行上遇到断点。我不确定这个简单的测试是否按预期工作,或者为什么 finally 块似乎没有在这个测试或我的生产代码中运行。

我认为 finally 块总是运行(这不是它们的全部意义吗?)。这里发生了什么?

4

2 回答 2

6

finally 块将始终运行,除非进程本身突然终止——这就是这里发生的事情。这不像Thread.Sleep是抛出异常,堆栈正在优雅地展开 - 整个过程只是被中止。至少据我所知:)

于 2011-07-25T08:17:14.403 回答
2

原来我需要做的是从这个答案中复制代码:Capture console exit C#

于 2011-07-25T08:40:04.553 回答