描述这个 article ,关于在 IDisposable 对象上使用 using 的用法,它说了一个有趣的词:
...使用 block ,在 block 结束后的某个时间自动调用 Dispose 方法。 (它可能不是立即的;它取决于 CLR。)
这里有趣的是“它可能不是立即的;它取决于 CLR”。 任何人都可以提供更多详细信息吗?因为我们有一些奇怪的情况,似乎在代码中使用(new MyDisposable()){...},在 block 结束后}它确实NOT立即调用 MyDisposable 实例上的 Dispose 方法,但一些时间晚些。
更新:对我来说,结论是我在其他地方遇到了问题。我认为可以在使用 block 结束后一段时间后调用 Dispose 方法。但是当它不是那样的时候,我必须在我的代码中的其他地方找到问题。 感谢回复!
最佳答案
using (SomeDisposableResource resource = new SomeDisposableResource())
{
// TODO: use the resource
}
相当于:
SomeDisposableResource resource = new SomeDisposableResource();
try
{
// TODO: use the resource
}
finally
{
if (resource != null)
{
((IDisposable)resource).Dispose();
}
}
所以,由你来下结论。一切都取决于您如何定义立即。在多线程环境中,可以在 try
block 和资源处置之间执行其他操作,但由于它被包装在 finally
block 中,因此可以保证 Dispose方法将被调用。
关于c# - 在 IDisposable 对象上使用语句 - 调用 Dispose 方法的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060684/