TPL数据流,数据块收到第一项时的通知

时间:2013-04-25 13:06:08

标签: c# task-parallel-library dataflow tpl-dataflow

我想知道当在输入缓冲区中接收到第一个项目或在数据块中处理第一个项目时是否可以订阅一次性通知。我知道我可以在数据块中设置一个标志,但这会产生开销,因为它会检查每个新项目上的标志。我的数据块处理数百万个项目,因此该标志会增加不必要的开销

有没有更好的方法来通知第一个来料?

2 个答案:

答案 0 :(得分:1)

您可以尝试创建一个MaxMessages = 1的链接到处理通知的块。在发送单个邮件后,此链接将被删除。

答案 1 :(得分:1)

(我知道这已经晚了11个月......但是我正在回答,希望有人能告诉我为什么这不是个好主意。)

你有一个特定的块X,你想知道它何时收到它的第一条消息。它有一个上游块。在上游块和块X之间插入一个TransformBlock,将其从上游块链接到MaxMessages = 1,以便在获得第一条消息时立即取消链接。这也阻止了上游块。插入的TransformBlock的Func在其委托中做了3件事:

  1. 您是否愿意收到“收到第一个阻止”的通知。
  2. 将其后继块X链接到上游块。
  3. 返回其参数不变以传递给块X。
  4. 换句话说......插入的块接受并传递第一个数据项,并从数据流中拼接出来。