.net 为什么不是';是否有一个ConcurrentList<;T>;

.net 为什么不是';是否有一个ConcurrentList<;T>;,.net,thread-safety,task-parallel-library,concurrent-collections,.net,Thread Safety,Task Parallel Library,Concurrent Collections,新命名空间System.Collections.Concurrent包含字典、队列和堆栈以及其他类的并发集合。有人知道为什么没有ConcurrentList吗 更新 我发布了一个新问题来解释我目前的情况。我更喜欢这样,而不是改变原来问题的整体意义。这是一个新问题。对于从另一个线程更改的数据结构,随机访问没有多大意义 如果您查看并发集合,您会注意到它们的接口是专门为多线程访问设计的。我想不出一个有用的类似列表的接口,它可以很好地与多线程代码配合使用 如果元素从未移动过,那么随机多线程访问是有意义的

新命名空间System.Collections.Concurrent包含字典、队列和堆栈以及其他类的并发集合。有人知道为什么没有ConcurrentList吗

更新
我发布了一个新问题来解释我目前的情况。我更喜欢这样,而不是改变原来问题的整体意义。这是一个新问题。

对于从另一个线程更改的数据结构,随机访问没有多大意义

如果您查看并发集合,您会注意到它们的接口是专门为多线程访问设计的。我想不出一个有用的类似列表的接口,它可以很好地与多线程代码配合使用


如果元素从未移动过,那么随机多线程访问是有意义的,但是您有一个数组。

对于从另一个线程更改的数据结构,随机多线程访问没有多大意义

如果您查看并发集合,您会注意到它们的接口是专门为多线程访问设计的。我想不出一个有用的类似列表的接口,它可以很好地与多线程代码配合使用


如果元素从未移动过,那么随机多线程访问是有意义的,但是您有一个数组。

如果两个线程同时添加项目,您对“顺序”有什么期望?如果您只需要一组项目,则更合适

如果两个线程同时添加项目,您对“订单”的期望是什么?如果您只需要一组项目,则更合适

早在2011年(代码可用),它是线程安全、无锁的,并实现了一些
IList
接口

值得注意的是,除了
Add
之外,不支持任何改变列表的操作;i、 例如,它是一个仅附加的集合。因此,
Insert
RemoveAt
等都不起作用。

回到2011年(代码可用),它是线程安全、无锁的,并实现了一些
IList
接口


值得注意的是,除了
Add
之外,不支持任何改变列表的操作;i、 例如,它是一个仅附加的集合。因此,
Insert
RemoveAt
等都不起作用。

IList有许多有用的子集,可以以线程安全的方式实现。例如,可以有一个行为与数组类似的集合,但也包括一个
Add
方法,该方法返回新添加项的索引。数组不能更改大小,因此这样的集合可以完成数组无法完成的角色。IList的
IList
有多种有用的子集,可以以线程安全的方式实现。例如,可以有一个行为与数组类似的集合,但也包括一个
Add
方法,该方法返回新添加项的索引。数组无法更改大小,因此这样的集合可以执行数组无法执行的角色。如果
t
被限制为
class
,是否可以使用
CompareExchange
将列表中的最后一项从null更改为新项,然后使用
CompareExchange
更新
\u count
?如果第一次
比较交换失败
,请使用
\u count
和(一个加上上上一次
\u count
)中的较大者重试该操作。如果第二个失败,请在
\u count
小于新值时重试。如果
T
被限制为
class
,是否可以使用
CompareExchange
将列表中的最后一项从null更改为新项,然后使用
CompareExchange
更新
\u count
?如果第一次
比较交换失败
,请使用
\u count
和(一个加上上上一次
\u count
)中的较大者重试该操作。如果第二次失败,请在
\u count
小于新值时重试。ConcurrentBag不适合一般使用。它是一个非常专门的类,用于提供快速线程本地存储和访问。ConcurrentBag不适合一般使用。这是一个非常专门的类,用于提供快速线程本地存储和访问