我正在使用 BlockingCollection 处理一些文件,然后将它们上传到服务器。
现在我有一个 Producer 递归文件系统并将某些文件压缩到临时位置。一旦它完成了一个文件,它就会将我自己的对象添加到 BlockingCollection 中,其中包含诸如文件名、文件路径、修改日期等信息。消费者然后抓住这个对象并使用它来上传文件。当 Producer 完成搜索文件系统并处理文件时,它调用 BlockingCollection.CompleteAdding() 方法向 Consumer 发出它已经完成的信号。
我想做的是将生产者的数量增加到2个或更多。原因是压缩过程需要一段时间,而且在多核处理器上我只利用 1 个核心。这会导致生产者有时在更快的网络上落后于消费者。
我的问题是,当我有多个生产者且只有一个消费者时,我如何向消费者发出所有生产者都已完成工作的信号?如果我在其中一个生产者上调用 BlockingCollection.CompleteAdding() 方法,我仍然可以让一个或多个其他生产者仍在工作。