2

最初のアイテムが入力バッファーで受信されたとき、またはデータ ブロックで処理されたときに、1 回限りの通知をサブスクライブできるかどうか疑問に思います。データブロック内にフラグを設定できることは承知していますが、新しいアイテムごとにフラグのチェックを実行するため、オーバーヘッドが発生します。私のデータ ブロックは数百万のアイテムを処理するため、このフラグは不要なオーバーヘッドを追加します。

最初の着信アイテムで通知を受けるより良い方法はありますか?

4

2 に答える 2

1

(これが 11 か月遅すぎることは承知していますが、これが良い考えではない理由を誰かが教えてくれることを期待して回答しています。)

最初のメッセージをいつ受信するかを知りたい特定のブロック X があります。上流ブロックがあります。アップストリーム ブロックとブロック X の間に TransformBlock を挿入し、MaxMessages=1 でアップストリーム ブロックからリンクして、最初のメッセージを取得するとすぐにリンク解除されるようにします。それは上流のブロックもブロックします。挿入された TransformBlock の Func は、そのデリゲートで 3 つのことを行います。

  1. 「最初のブロックが受信されました」という任意の通知を行います。
  2. 後続ブロック X を上流ブロックにリンクします。
  3. ブロック X に渡される引数を変更せずに返します。

言い換えれば...挿入されたブロックは最初のデータ項目を受け入れて渡し、データフローからスプライスされます。

于 2014-03-26T02:43:00.547 に答える
1

MaxMessages=1 を使用して、通知を処理するブロックへのリンクを作成してみてください。このリンクは、1 つのメッセージを配信した後に削除されます。

于 2013-07-28T08:35:28.057 に答える