TPL Dataflow在运行时中断了LinkTo()

时间:2012-08-21 06:18:33

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

我有一个TransformManyBlock<Tin, Tout>,在运行时通过LinkTo(...)添加消费者(ActionBlocks)。

  1. TransformManyBlock是正确的数据流块,消耗元素,转换它们,然后输出(输入相同的数字元素作为输入)给几个消费者(每个链接到消费者消费相同的元素,如广播)?我故意不选择BroadCastBlock,因为它似乎无法像BufferBlock一样转换元素。

  2. 我想知道在运行时如何取消消费者链接(ActionBlocks)?就我所见,LinkTo()似乎没有提供这样的功能。

1 个答案:

答案 0 :(得分:7)

  1. TransformManyBlock用于将输入中的一个项目转换为输出中的多个项目,它与消费者数量无关。

    如果您想为每个目标单独执行转换,那么这正是cloningFunction中的BroadcastBlock所针对的。

    如果您想要执行一次转换然后将每个目标发送到同一个对象,则可以将TransformBlockBroadcastBlock组合在一起进行组合。该项目将由TransformBlock转换,然后由BroadcastBlock发送给所有目标。

  2. LinkTo()的返回值为:

      

    IDisposable,在致电Dispose时,会取消源与目标的链接。

    这正是您所需要的。只需存储从LinkTo()返回的值,然后在必要时存储Dispose()