在using语句中停止调试模式是否关闭文件流?

问题描述 投票:1回答:1

只是在我编写拉链提取方法时发生的一个想法。

我有一个OpenRead方法的using语句,所以一旦语句运行就应该处理资源,我们都知道。但是在编写代码的时候,我正在调试几次,我已经停止调试以改变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);
                    }
                }
            }
        }

我希望它关闭所有流/资源,但只是好奇。

c# .net visual-studio ziparchive
1个回答
2
投票

停止调试器时,实际上是在终止进程。你要求它停止 - 你没有要求它礼貌地解除一切,这可能会执行任意数量的代码。

当您在调试器中点击停止时,您应该拥有的唯一期望是该过程可能会退出。没有更多的承诺。

这与常规执行相同; usingtry / finally,并不能保证finally会执行;如果有人杀死进程:它将不会执行。如果有人拔下电源线:它将无法执行。等等finally只会在优雅的正常执行路径中执行(无论是成功还是异常)。

© www.soinside.com 2019 - 2024. All rights reserved.