c# - 在 IDisposable 对象上使用语句 - 调用 Dispose 方法的延迟

标签 c# idisposable using-statement

描述这个 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/

相关文章:

c# - 通过 SQLCLR 使用 Rest API 并通过 SqlPipe 发送结果

c# - SQL 网络接口(interface),错误 : 26 using Windows Azure

.net - 如何使不需要的命名空间默认不出现在新类之上

c# - 在 C# 中使用语句和 await 关键字可以很好地发挥作用

c# - NASA Asterank 请求每次返回相同

c# - 转换年份ToInt16无法正常工作

c# - 在类中多次使用 IDisposable 对象的更好方法

c# - 关于 C# Dispose Pattern 的具体问题

c# - 我是否需要在 dispose() 命令之前检查对象是否为空?

c# - 为什么使用 block 会吞下异常?