【发布时间】:2011-02-17 03:52:14
【问题描述】:
MSDN 很好地记录了 BCL 类型的实例成员的线程安全性,但我从未真正看到说明如何调用 IDisposable 类型的 Dispose 方法的信息。
Dispose 方法是不是 a) 保证对所有类都是线程安全的,b) 从不保证是线程安全的,c) 保证对某些类是线程安全的(如果是,具体在哪里记录)?
最后,如果保证Dispose 方法是线程安全的,那是否意味着我必须在类中使用一次性资源的每个实例方法上加一个锁?
旁白:我知道,由于垃圾收集在 .NET 中的工作方式(非常激进),类型的终结器应该是线程安全的,并且它们可能会调用 Dispose 方法。但是,让我们把这个问题放在一边。
【问题讨论】:
-
谢谢,但这不是我要问的。此外,我在这里根本不关心终结器。
-
再说一遍,您不应该明确地调用
Dispose并且不依赖Finalizer 线程来这样做吗? -
@Chris O:当然;但推荐的做法是让终结器在任何情况下都处置非托管资源,作为后备。 MSDN 文章描述并演示了这种推荐的做法。
-
这些天在 StackOverflow 上获得了投票,真是令人惊讶。可惜这样的问题很少受到关注。感谢所有回答/评论的人。但是。
标签: .net thread-safety dispose idisposable