我正在使用GetConsumingEnumerable()来迭代BlockingCollection以使用另一个线程生成的数据。我喜欢它,因为它在foreach中删除了集合中的项目,但是在某些情况下不应该删除该项目。
有没有办法取消从集合中删除该项目?或者有更好的方法来实现我在这里所做的事情吗?
我尝试将该项目添加回集合中,但是当集合标记为已完成时,它会爆炸。
private static void iterateQueued()
{
while (!queuedCollection.IsCompleted)
{
foreach (var t in queuedCollection.GetConsumingEnumerable())
{
var movs = (from m in otherCollection
where m.ID == t.ID
select m).FirstOrDefault();
if (movs != null) //all set, let t be disposed
movs.Things.Add(t);
else //no good, keep t for next iteration
{
if (!queuedCollection.IsCompleted)
queuedCollection.TryAdd(t); //explodes when queuedCollection.CompleteAdding() is called
else thwarted++;
}
}
}
}