BlockingCollection.GetConsumingEnumerable取消删除

时间:2016-05-14 05:47:42

标签: c# multithreading blockingcollection

我正在使用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++;
                }
            }
        }
    }

0 个答案:

没有答案