2012-08-30 96 views
6

我正在使用生产者 - 消费者问题并具有BlockingCollection,我生成数据并从中使用日期。我调用了一种方法来生成数据,并将blockingcollection设置为CompleteAdding,以便消费者从BC(blockingcollection)中消耗所有数据,并且在进行一些处理后,应用程序想要向BC添加一些其他数据,但它不能因为它被设置为CompleteAdding,我怎样才能将CompleteAdding设置为false,或者我如何使用BC中的所有数据,而不是等待ComleteAdding?在CompleteAdding之后添加到BlockingCollection被调用

谢谢。

回答

10

你不能 - 调用CompleteAdding的全部意思是说:“永远不会有更多的数据添加到这个集合中,一旦它是空的,你就知道你已经完成了。”您要求的内容有点像说:“关闭网络连接后,我该如何重新打开它才能写入更多数据?”

事实上,你想要建议你应该重新考虑你的设计。也许你应该在这一点上创建一个新的BlockingCollection?或者,也许你真的想拨打CompleteAdding开始?

+0

但是,如果我不呼叫CompleteAdding,循环如何结束?因为我使用了一个循环.GetConsumingEnumerable()属性 – XandrUu

+0

@XandrUu:它通常不会,因为你会输入更多的数据。如果你想要一个“完成这批”的想法,你可能要考虑一个定点值......或者每个批次都有一个集合。 –

+0

@JonSkeet调用它的用例是什么,即:为什么你会限制自己说,这个集合是关闭的? – koenmetsu

相关问题