“using”语句中的灾难性故障,即using(var a= new stream())和a.Something()抛出

本文关键字:using new stream Something var 抛出 语句 灾难性 故障 | 更新日期: 2023-09-27 18:35:11

所以我明白,在use block语句结束时,调用dispose方法。

如果我使用'using(var a = new Stream()) { a.SomethingThrowsAnException() }'会发生什么情况

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

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

有什么建议吗?

谢谢。

“using”语句中的灾难性故障,即using(var a= new stream())和a.Something()抛出

是的。 using块编译为:

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

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