在使用C#中的文件时,我习惯于考虑释放相关资源.通常这是一个using语句,除非它是像File.ReadAllLines这样的单行内容方法,它将为我打开和关闭文件.
.Net 4.0引入了方便的File.ReadLines方法.这将返回一个IEnumerable,并被视为一种更有效的方法来处理文件 - 它避免将整个文件存储在内存中.为此,我假设枚举器中有一些延迟执行逻辑.
显然,因为这个方法返回一个IEnumerable,而不是IDisposable,我不能用我对使用语句的直觉反应.
我的问题是:考虑到这一点,使用此方法是否存在资源释放的问题?
调用此方法是否意味着关联文件锁的释放是不确定的?
我正在查看来自MSDN @的TPL异常处理示例
http://msdn.microsoft.com/en-us/library/dd537614(v=VS.100).aspx
代码的基本形式是:
Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); });
try
{
task1.Wait();
}
catch (AggregateException ae)
{
throw ae.Flatten();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是竞争条件吗?如果task1在try执行之前抛出会发生什么?我错过了阻止这场比赛的东西吗?
不应该这样写:
try
{
Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); });
task1.Wait();
}
catch (AggregateException ae)
{
throw ae.Flatten();
}
Run Code Online (Sandbox Code Playgroud)