1

所以我知道在 using 块语句的末尾,调用了 dispose 方法。

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

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

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

有什么建议么?

谢谢。

4

2 回答 2

5

是的。该using块编译为:

var a = new Stream();
try
{
     a.SomethingThrowsAnException();
}
finally
{
     a.Dispose();
}
于 2012-05-24T21:55:13.630 回答
0

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

于 2012-07-19T01:28:53.477 回答