Консольное приложение C #, наконец, не вызывает блокировку - PullRequest
4 голосов
/ 25 июля 2011

Я пишу консольное приложение для запуска в качестве запланированной задачи, и оно не выполняет блок 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 не запускается ни в этом тесте, ни в моем рабочем коде.

Я подумал, что наконец-то блоки всегда запускаются (не в этом ли их смысл?). Что здесь происходит?

Ответы [ 2 ]

6 голосов
/ 25 июля 2011

Блок finally будет всегда работать, если только сам процесс не завершится внезапно - что и происходит здесь.Это не значит, что Thread.Sleep создает исключение, а стек изящно разматывается - весь процесс просто прерывается.По крайней мере, насколько я могу сказать:)

2 голосов
/ 25 июля 2011

Оказывается, мне нужно было скопировать код из этого ответа: Захватить консоль при выходе из C #

...