List 没有实现SyncRoot!
每个人都使用很多List。 我需要迭代这个列表,所以我使用已知的SyncRoot模式。
最近我在这篇文章中注意到应该避免使用SyncRoot以支持“嵌入式”线程安全(每个方法将锁定私有对象而不使用SyncRoot属性暴露它)。 我能理解,部分我同意这一点。
问题是List 类没有实现SyncRoot属性,即使实现了ICollection接口,它暴露了SyncRoot属性。 我说这会使代码失效
List list = new List() list.SyncRoot;
给我以下编译器错误:
错误CS0117:’System.Collections.Generic.List’不包含’SyncRoot’的定义
…如果这是真的,我怎么能在迭代它时同步List 类型的公共属性?
它实际上是明确实现的。
object ICollection.SyncRoot { get { if (this._syncRoot == null) { Interlocked.CompareExchange(ref this._syncRoot, new object(), null); } return this._syncRoot; } }
这意味着您必须转换为ICollection
才能使用它。