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

Mat*_*olf 2 c# concurrency dataflow task-parallel-library tpl-dataflow

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

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

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

svi*_*ick 8

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

    如果要单独执行转换为每个目标,那么这正是cloningFunctionBroadcastBlock为.

    如果要执行一次转换,然后发送给每个目标相同的对象,你可以结合TransformBlock,并BroadcastBlock通过链接在一起.该项目将被转换TransformBlock,然后由所有目标发送BroadcastBlock.

  2. 返回值LinkTo()是:

    一个IDisposable是,在调用时Dispose,将取消链接的目标的源.

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

  • OP应该接受svick的答案是正确的. (3认同)