いくつかの答えを見つけようとして、類似しているが同じではないリンクをいくつか読みました: バッチで BlockingCollection<T> を消費する方法
ただし、(上記のリンクで) GetConsumingEnumerable を使用しないと怪しいようです。
コンシューマー (特異である必要があります) がコレクションを空にしている間、プロデューサーを効果的にブロックする正しい方法は何ですか?
[バッチ処理を行いたいのは、各バッチが Web サービス呼び出しを行うためです。これは、すべてのメッセージ/アイテムが独自の呼び出しを必要とする場合にボトルネックとなります。メッセージ/アイテムのバッチ処理は、このボトルネックの解決策です。]
理想的には:
1) メッセージを受け取る
2) コレクションにプッシュする新しいプロデューサー タスク
3) コレクションが「フル」(任意の制限) の場合、すべてのプロデューサーをブロックし、新しいコンシューマー タスクがコレクションのすべてを消費してから、プロデューサーのブロックを解除します。
言い換えると; (並列プロデューサー) xor (単一の消費者) がいつでもコレクションに作用することを望みます。
これは以前に行われるべきだったようですが、特にこのように動作するコードスニペットが見つからないようです。
助けてくれてありがとう。