我想获得与List相同的行为。插入(索引、内容)在List中,它只是将剩余的元素向前推,同时允许您在指定的索引处插入新元素。
但是我正在处理并发,所以我不能再使用列表,而是需要使用并发集合。知道我们该怎么做吗?
注意:
我试图实现存储在并发集合中的自定义对象的自定义排序(即,如果在index = 2, LastName按字母顺序小于传入LastName,它必须允许传入放置在index = 2,同时将旧值推/滑动到下一个索引。)因此保留所有内容(new)
ConcurrentBag<T>
不提供您正在寻找的功能。这不是单子,是个包。您无法控制其内容的顺序,甚至无法从此集合中删除特定项。你所能做的就是把Add
或Take
放到一个项目中。
您正在寻找的丰富功能没有任何并发集合提供。您最好的选择可能是使用普通的List<T>
和lock
保护。只要确保您永远不会在受保护的区域之外触摸List<T>
。无论你是需要Add
、Insert
、Remove
、枚举、读条目、读Count
,还是其他任何操作,你都必须在被同一个对象锁定的lock
区域内执行这些操作。
作为旁注,很可能你正在尝试做的事情从根本上是错误的。您所要求的功能不可用是有原因的:如果不引入竞争条件,实际上不可能以有意义的方式使用它。例如,两个线程可以根据列表中的现有值独立地确定它们必须在索引5中插入一个新项,然后同时尝试在该索引中插入新项。两者都将成功,但是其中一项将在被另一项推送后结束在索引6中,并且这两个项之间的相对顺序可能不正确。