我试图学习如何使用线程和Im坚持并发集合。并发收集VS锁定列表
我有应用程序,其中有对象和方法的列表unfinishedOBjectsList<MyObject>
,对特定对象(如DoChange(MyObject对象))做了一些更改。之后,该对象从第一个列表中取出并插入finishedObjectsList<MyObject>
。
现在,我想运行使用线程的方法,该线程工作正常 - 每个线程都做了一些更改(更改次数较少,所以我添加了ThreadSleep()来模拟一些对象的更长处理) unfinishedOBjectsList,将它从unfinishedOBjectsList中移除并放入第二个列表中。
下一步我想实现的是,会有另一种方法(例如用户使用按钮处理),这将允许用户从第一个列表中选择任何对象并将其删除为manualy。我想模拟的“问题”是,如果对象正在被线程“处理”,用户不应该能够从列表中删除它。
我试过ConcurrentQueue - 但问题是,使用队列,我无法删除特定的对象(使用类似Remove(MyObject)的东西,因为我可以做与列表)。之后,我尝试了ConcurrentBag和BlockingCollection,但问题是一样的 - 我能够删除集合中的下一个对象,但不是集合中间的对象。
我曾考虑过使用字典,但我不能看到为什么我应该使用字典与键,值参数,而我只需要存储对象的原因。
我的问题是 - 我应该甚至在这种情况下使用ConcurrentCollections?或者我应该简单地锁定列表并保持原样?处理多访问列表时,正确的方法是什么?
谢谢
这是很好的解释,我不知道有像“联锁”之类的东西。我一定会用它并按照你的建议来实现它。感谢您的时间和帮助,我真的很感激。 – JakubJ 2015-02-12 08:19:51