2

データフローブロック内のキュー(バッファブロックまたはアクションブロックのキュー)が保持できるアイテム/メッセージの最大数を設定し、その上限を上流の他のデータブロックに伝播する方法があるかどうか疑問に思います。保持できる最大のアイテムが設定されています。データブロックを供給するためのキューはアイテムが増えるだけだと思いますよね?それらをロックする方法はありますか、または上限のあるキューを含むブロックにリンクするブロックのすべてのキューにも上限を実装する必要がありますか?

たとえば、バッファブロックにリンクするカスタム生成データフロー ブロックから始めることができます。このバッファ ブロックは、キュー内の特定の数を超えないようにしたいキューを持つアクション ブロックにリンクします。生成中のデータフロー ブロックまたはバッファブロックのキューが、チェーン内の最後のデータフロー ブロックが一度にそれ以上のアイテムを消費できず、inQueue がそれ以上のアイテムを受け入れられないことを認識して、独自のキューにますます多くのアイテムを格納するのを防ぐにはどうすればよいですか? ?

4

1 に答える 1

2

これを行うための「スマート」な方法はありませんBoundedCapacity。ブロックを作成するときに、各ブロックのオプションを設定するだけです。

あなたが提案していることがうまくいかない理由はいくつかあると思います。

  1. ブロックは、その容量をどの程度正確に決定する必要がありますか?の容量が100であるからといっActionBlockて、その前の容量が同じであるとは限りませんBufferBlock。これは人間が決めなければならないことです。
  2. ブロックのオプションは、作成後に変更することはできません。やりたいことをするためには、オプションを変更する必要があります。

そうは言っても、あなたの単純なケースでは、を取り除きBufferBlock、生産ブロックから直接にアイテムを送ることができると思いますActionBlock

于 2012-07-11T07:38:53.497 に答える