当我写一个zip提取方法时发生的一个想法。
我为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);
}
}
}
}
我希望它能关闭所有流/资源,但很好奇。
答案 0 :(得分:2)
停止调试器时,实际上是在杀死进程。您要求它停止-您不是要它礼貌地放松一切,这可以执行任意数量的代码。
当您在调试器中按下stop时,您唯一的期望就是进程可能退出。没有其他承诺。
这与常规执行相同; using
是try
/ finally
,finally
没有执行的保证;如果有人杀死了该进程:它将不会执行。如果有人拔下电源线:它将无法执行。 finally
只会在正常的正常执行路径中执行(无论是成功还是异常)。