“using”语句中的灾难性故障,即使用(var a = new stream())和a.Something()会引发异常

时间:2012-05-24 21:52:17

标签: c# .net idisposable using finalize

所以我理解在using语句结束时,调用dispose方法。

如果我使用'using(var a = new Stream()) { a.SomethingThrowsAnException() }'

会怎样?

流是否仍然通过他处理方法?

我写了一个实现IDisposable的类,它是关键任务,我不会丢失内存中的内容,因此我计划在发生灾难性事件时序列化数据,即我有一个像我正在使用的对象的自定义流。

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:5)

是。 using块编译为:

var a = new Stream();
try
{
     a.SomethingThrowsAnException();
}
finally
{
     a.Dispose();
}

答案 1 :(得分:0)

我认为可能存在这样一种情况,即finally子句最终由另一个线程执行(我在此问题上发布了一个单独的问题)。它可能很重要,因为某些操作(例如lock.release)需要在执行lock.acquire的同一个线程上发生。我不确定究竟是什么导致这种情况,或者如何延迟线程终止以确保在执行原始新操作的线程上发生a.Dispose ......