【发布时间】:2014-11-11 11:04:22
【问题描述】:
我正在寻找一种可以迭代的线程安全并发数据结构。顺序对我来说并不重要。
我想要一个Collection 或Objects。
一个线程将遍历这个集合,不断调用每个对象Object.Add(Item)
例如:
Collection<Object> collection = new Collection<Object>();
//Run On New thread
while(tasksAvaliable)
{
foreach(var item in collection)
{
item.Add(task); //I get tasks from a Concurrent Queue
}
}
在另一个线程/计时器中,它将尝试尝试从集合中添加、编辑、删除这些对象。 (但频率低于其他线程)
我可以使用什么收藏?我目前正在使用并发包。但我不确定当我在其上使用 foreach 时,集合中的每个 Object 都会收到我在 foreach 循环中提供的 Task。
我在想我可以使用普通的List<Object> 并在我添加、编辑或从中删除对象时简单地锁定它。但是,我不使用的对象将被阻止。我宁愿错过,即我更喜欢细纹锁。
【问题讨论】:
-
目前还不清楚您要在这里做什么。你能给我们一些更具体的信息吗?如所写,您将多次将
task添加到每个item,除非那些item引用已从集合中删除。 可能ConcurrentBag<T>会做你想做的事,但我的经验是它通常不是大多数问题的解决方案。此外,您应该考虑使用BlockingCollection而不是ConcurrentQueue来收集任务。
标签: c# multithreading collections concurrency