BlockingCollection を使用していくつかのファイルを処理し、サーバーにアップロードしています。
現在、ファイル システムを再帰的に処理し、特定のファイルを一時的な場所に圧縮する単一の Producer があります。ファイルの処理が完了すると、独自のオブジェクトが BlockingCollection に追加されます。このオブジェクトには、ファイル名、ファイル パス、変更日などの情報が含まれています。次に、コンシューマーはこのオブジェクトを取得し、それを使用してファイルをアップロードします。Producer は、ファイル システムの検索とファイルの操作を完了すると、BlockingCollection.CompleteAdding() メソッドを呼び出して、完了したことを Consumer に通知します。
私がやりたいことは、プロデューサーの数を 2 つ以上に増やすことです。その理由は、圧縮プロセスに時間がかかり、マルチコア プロセッサでは 1 つのコアしか利用していないためです。これにより、Producer は、より高速なネットワークで Consumer に遅れをとることがあります。
私の質問は、複数のプロデューサーと 1 つのコンシューマーしかない場合、すべてのプロデューサーが作業を終了したことをコンシューマーに通知するにはどうすればよいですか? プロデューサーの 1 つで BlockingCollection.CompleteAdding() メソッドを呼び出すと、1 つ以上の他のプロデューサーがまだ機能している可能性があります。