编程语言
首页 > 编程语言> > C#Console应用程序未调用finally块

C#Console应用程序未调用finally块

作者:互联网

我正在编写一个控制台应用程序作为计划任务运行,当您使用关闭按钮关闭它时,它似乎不执行正在运行的代码的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块将始终运行 – 这就是这里发生的事情.它不像Thread.Sleep抛出一个异常,并且堆栈优雅地展开 – 整个过程只是被中止.至少据我所知:)

标签:c,console-application,try-finally
来源: https://codeday.me/bug/20190610/1210209.html