Останавливает ли остановка режима отладки при использовании оператора поток файлов? - PullRequest
1 голос
/ 29 марта 2019

Просто мысль, которая возникла, когда я писал метод извлечения почтовых индексов.

У меня есть оператор using для метода OpenRead, поэтому ресурсы должны быть удалены после выполнения оператора, хотя все мы знаем.Однако во время написания кода я отлаживал и пару раз останавливал отладку, чтобы изменить некоторый код в операторе using.Однако, когда я прекратил отладку, оператор using не прошел полностью, поэтому технически не удалил / не закрыл никаких ресурсов. Делает ли Visual Studio это автоматически, когда вы прекращаете отладку?

Кратко огляделсяно не могу найти никаких подсказок.Я использую Visual Studio Community 2017 (версия 15.9.10) и .NET Framework (версия 4.7.03056)

        public void Decompress_SaveToFile(string zipFilePath, string directoryPath)
        {
            using (ZipArchive archive = ZipFile.OpenRead(zipFilePath))
            {
                foreach(ZipArchiveEntry entry in archive.Entries)
                {
                    if(File.Exists(directoryPath))
                    {
                        Console.WriteLine("Decompressed file already exists.");
                    }
                    else
                    {
                        entry.ExtractToFile(directoryPath);
                    }
                }
            }
        }

Я ожидаю, что он закроет все потоки / ресурсы, но просто любопытно.

1 Ответ

2 голосов
/ 29 марта 2019

Когда вы останавливаете отладчик, вы по существу убиваете процесс. Вы попросили stop - вы не просили его вежливо раскрутить все, что может выполнить произвольное количество кода.

Когда вы нажимаете «Стоп» в отладчике, единственное ожидание, которое вы должны иметь, это то, что процесс , вероятно, завершается. Больше ничего не обещано.

Это то же самое, что и при обычном исполнении; using является try / finally, и нет гарантии , что finally будет выполняться; если кто-то убивает процесс: он не будет выполнен. Если кто-то отключит кабель питания: он не будет работать. И т. Д. finally будет выполняться только во время изящного нормального пути выполнения (будь то в случае успеха или исключения).

...