2017-04-19 3 views
1

さまざまなDataBlockで構成される複雑なデータフローを設計しました。私はフローにパケットを送り、最後に結果を受け取る。TPL DataFlowがデータフローを2回呼び出す

私は最初の呼び出しのために

input.Post(); 
input.Complete(); 

// and later with 
ReceiveAsync(); 

で動作するすべてが正常に動作しますが、私はフローグラフに介して第2のデータ・パケットを送信する方法がわかりません。

グラフ内では、WriteOnceBlockも使用する必要があります。これは、フローを2回コールするときに問題になる可能性がありますか?

+0

検査のためにフローを投稿する必要があります。表示されていないと動作しない理由を説明することはできません。しかし、一般的には、あなたの流れで 'Complete'を呼んだら、それ以上のデータを送ることはできません。また、その名前が示すように、 'WriteOnceBlock'は一度だけ書き込むことができますが、実際にはメインパイプラインには存在してはいけません。ブランチに表示される可能性がありますが、再び1つのデータしか書き込まれません。 – JSteward

答えて

1

Completeメソッドを呼び出した後、または補完伝播を使用してリンクしたユーザーのために、TPL Dataflowブロックを使用することはできません。だから、あなたの呼び出しのたびにパイプラインを作り直すか、またはただ一つの呼び出しのためにCompleteに電話しないことが好ましい(どちらが望ましい)か。あなたのデザインに

提案:

  • your'reがlinking the blocksによって代替することができ、あなたのパイプラインでPost/Receive方法、を使用してデータを取得しているようです。さらに、completion propagation for thisを使用することができるので、コード内のすべての継続ハンドラがあれば削除します。
  • WriteOnceBlockが必要ですか? Broadcastに切り替えることができますが、それでもデータの値はありますが、次の呼び出しで上書きできます。
  • これはまだできない場合は、あなたはMaxMessages for linked blocksを指定するか、またはあなたがあなたの次の呼び出しのためにそれを削除し、新しいものWriteOnceBlockを作成することができますLinkTo methodIDisposable結果を格納することにより、どちらかあなたのWriteOnceBlockのリンクを解除することができます。
関連する問題