Luc*_*uca 12 c# collections synchronization
每个人都使用很多List.我需要迭代这个列表,所以我使用已知的SyncRoot模式.
最近我在这篇文章中注意到应该避免使用SyncRoot以支持"嵌入式"线程安全(每个方法将锁定私有对象而不使用SyncRoot属性暴露它).我能理解,部分我同意这一点.
问题是List <T>类没有实现SyncRoot属性,即使实现了ICollection接口,它暴露了SyncRoot属性.我说这会使代码失效
List<int> list = new List<int>()
list.SyncRoot;
Run Code Online (Sandbox Code Playgroud)
给我以下编译器错误:
错误CS0117:'System.Collections.Generic.List'不包含'SyncRoot'的定义
...如果这是真的,我怎么能在迭代它时同步List <T>类型的公共属性?
Cha*_*ion 18
它实际上是明确实现的.
object ICollection.SyncRoot
{
get
{
if (this._syncRoot == null)
{
Interlocked.CompareExchange(ref this._syncRoot, new object(), null);
}
return this._syncRoot;
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着您必须转换ICollection为使用它.
| 归档时间: |
|
| 查看次数: |
6214 次 |
| 最近记录: |