C#控制台应用程序未调用最终阻止
我正在编写一个作为计划任务运行的控制台应用程序,当您使用close按钮关闭它时,它似乎不会执行正在运行的代码的finally块。我尝试用以下非常简单的控制台应用程序复制这种行为: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
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:我不知道这种情况下会发生什么-可能有什么,但我不知道。结果我需要做的是在这个答案中使用代码: