【发布时间】:2015-01-07 15:19:21
【问题描述】:
我在StackOverflow 中搜索有关try-finally 和using 块以及使用它们的最佳实践。
我在here 的评论中读到,如果您的应用程序通过终止进程而突然终止,finally 块将不会被执行。
我想知道,这同样适用于using 块吗?例如,如果Environment.exit() 调用发生在using 块内,流会关闭吗?:
//....
using (FileStream fsSource1 = new FileStream(pathSource,
FileMode.Open, FileAccess.Read))
{
//Use the stream here
Environment.exit();
}
再想一想,如果知道CLR Garbage Collector 如果在程序调用中没有正确关闭,可能会处理流对象,是否认为有必要关闭流在代码中,如果程序在流使用完成后确定终止?
例如,以下之间是否有任何实际区别:
//....
using (FileStream fsSource1 = new FileStream(pathSource,
FileMode.Open, FileAccess.Read))
{
//Use the stream here
}
Environment.exit();
还有:
//....
FileStream fsSource1 = new FileStream(pathSource, FileMode.Open, FileAccess.Read);
//Use the stream here
Environment.exit();
甚至是前面提到的例子?
【问题讨论】:
-
好的,这很有帮助,但问题有两部分:首先,如果我在 using 块中调用
Environment.Exit()会发生什么,其次也是最重要的,有什么区别如果程序在使用后立即终止,是否有任何意义。 -
您为什么不正确处理它?这只是一个好习惯——一旦不再需要资源,就立即处理掉它们。如果您决定有一天扩展您的应用程序并忘记您尚未处置该特定资源这一事实怎么办?
标签: c# filestream using try-catch-finally