2016-09-25 5 views
2

TransformManyBlockをデータフローメッシュにスロットルする方法を教えてください。Dataflow TransformManyBlockスロットル

私はBoundedCapacityを指定しましたが、それは入力キューにしか似ていないようです。
ブロックが処理を続けるので、入出力キューは増加を続けます。

次のブロックにはBoundedCapacityも指定されています。その後、すべてのアイテムがすべてのRAMを使用してTransformManyBlockの出力キューにスタックされます。

答えて

0

はい、正しく、出力キューを制限する機会はありません。これは、チェックするオーバーヘッドが増えたり、出力キューがいっぱいになったりしないように行われます。

確認する必要があることは、メッセージを追加するためにどの方法を使用しているかです。 Postの場合、メッセージが送信される前にスレッドがブロックされます。しかし、SendAsyncを使用している場合は、awaitとする必要があります。それ以外の場合は、awaitの状態マシンとメッセージを投稿中です。

しかし、あなたがすることができる少なくとも二つのこと:

  1. は、このような性質を持つカスタムブロックを作成します。これは難しいかもしれませんが、私はこれをお勧めしません。
  2. このような目的のためにBufferBlockをチェーンに導入すると、this is default wayがデータフローにいくつかのスロットリングを追加します。この場合、場所がなければメッセージはデータフロー上でさらに進まないでしょう。このソリューションは、お互いにブロックをリンクする場合に機能します。