所以我理解在using语句结束时,调用dispose方法。
如果我使用'using(var a = new Stream()) { a.SomethingThrowsAnException() }'
流是否仍然通过他处理方法?
我写了一个实现IDisposable的类,它是关键任务,我不会丢失内存中的内容,因此我计划在发生灾难性事件时序列化数据,即我有一个像我正在使用的对象的自定义流。
有什么建议吗?
感谢。
答案 0 :(得分:5)
是。 using
块编译为:
var a = new Stream();
try
{
a.SomethingThrowsAnException();
}
finally
{
a.Dispose();
}
答案 1 :(得分:0)
我认为可能存在这样一种情况,即finally子句最终由另一个线程执行(我在此问题上发布了一个单独的问题)。它可能很重要,因为某些操作(例如lock.release)需要在执行lock.acquire的同一个线程上发生。我不确定究竟是什么导致这种情况,或者如何延迟线程终止以确保在执行原始新操作的线程上发生a.Dispose ......