C#控制台应用程序未调用最终阻止

C#控制台应用程序未调用最终阻止,c#,console-application,try-finally,C#,Console Application,Try Finally,我正在编写一个作为计划任务运行的控制台应用程序,当您使用close按钮关闭它时,它似乎不会执行正在运行的代码的finally块。我尝试用以下非常简单的控制台应用程序复制这种行为: using System; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try

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

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Thread.Sleep(60000);
            }
            finally
            {
                Console.WriteLine("Finally");
            }
        }
    }
}
当通过调试器运行时,这不会命中
控制台.WriteLine
行上的断点。我不确定这个简单的测试是否按预期工作,或者为什么finally块在这个测试或我的生产代码中都没有运行


我想最后一个街区总是在跑(这不是它们的全部意义吗?)。这里发生了什么?

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

我需要做的是从以下答案中复制代码:

@Mitch:不确定-这对我来说是新的。@Jon:有什么合理的方法可以优雅地关闭(例如释放非托管资源)单击“关闭”按钮?@Jackson:我不知道这种情况下会发生什么-可能有什么,但我不知道。结果我需要做的是在这个答案中使用代码: