如何在ConcurrentBag中插入指定索引并保留所有值?



我想获得与List相同的行为。插入(索引、内容)在List中,它只是将剩余的元素向前推,同时允许您在指定的索引处插入新元素。

但是我正在处理并发,所以我不能再使用列表,而是需要使用并发集合。知道我们该怎么做吗?

注意:

我试图实现存储在并发集合中的自定义对象的自定义排序(即,如果在index = 2, LastName按字母顺序小于传入LastName,它必须允许传入放置在index = 2,同时将旧值推/滑动到下一个索引。)因此保留所有内容(new)

ConcurrentBag<T>不提供您正在寻找的功能。这不是单子,是个包。您无法控制其内容的顺序,甚至无法从此集合中删除特定项。你所能做的就是把AddTake放到一个项目中。

您正在寻找的丰富功能没有任何并发集合提供。您最好的选择可能是使用普通的List<T>lock保护。只要确保您永远不会在受保护的区域之外触摸List<T>。无论你是需要AddInsertRemove、枚举、读条目、读Count,还是其他任何操作,你都必须在被同一个对象锁定的lock区域内执行这些操作。


作为旁注,很可能你正在尝试做的事情从根本上是错误的。您所要求的功能不可用是有原因的:如果不引入竞争条件,实际上不可能以有意义的方式使用它。例如,两个线程可以根据列表中的现有值独立地确定它们必须在索引5中插入一个新项,然后同时尝试在该索引中插入新项。两者都将成功,但是其中一项将在被另一项推送后结束在索引6中,并且这两个项之间的相对顺序可能不正确。

相关内容

  • 没有找到相关文章

最新更新