调用CompleteAdding后添加到BlockingCollection

Xan*_*rUu 10 c# .net-4.0

我使用的是Producer-Consumer模式,我使用的BlockingCollection是生成数据并从中消耗数据的模式.我调用一个方法来生成数据,然后设置为BlockingCollection,CompleteAdding以便消费者使用来自的所有数据BlockingCollection.经过一些处理后,应用程序想要添加一些其他数据BlockingCollection,但它不能因为它被设置为CompleteAdding,如何设置CompleteAdding为false,或者如何从中消耗所有数据BlockingCollection,而不是等待ComleteAdding

Jon*_*eet 16

你不能 - 整个调用点CompleteAdding就是说,"这个集合中不会再有任何数据了.一旦它空了,你就知道你已经完成了." 您要求的有点像是说:"在我关闭网络连接后,如何重新打开它以便我可以写更多数据?"

建议你应该重新考虑你的设计.也许你应该BlockingCollection在这一点上创造一个新的东西?或许你真的不想打电话CompleteAdding开始?

  • @KoMet:这样任何需要知道它已完成的事情(例如提交数据库事务)都知道所有工作都已完成。知道您何时完成是“非常”有用的。 (2认同)