我有一个TransformManyBlock<Tin, Tout>
,在运行时通过LinkTo(...)
添加消费者(ActionBlocks)。
TransformManyBlock是正确的数据流块,消耗元素,转换它们,然后输出(输入相同的数字元素作为输入)给几个消费者(每个链接到消费者消费相同的元素,如广播)?我故意不选择BroadCastBlock,因为它似乎无法像BufferBlock一样转换元素。
我想知道在运行时如何取消消费者链接(ActionBlocks)?就我所见,LinkTo()似乎没有提供这样的功能。
答案 0 :(得分:7)
TransformManyBlock
用于将输入中的一个项目转换为输出中的多个项目,它与消费者数量无关。
如果您想为每个目标单独执行转换,那么这正是cloningFunction
中的BroadcastBlock
所针对的。
如果您想要执行一次转换然后将每个目标发送到同一个对象,则可以将TransformBlock
和BroadcastBlock
组合在一起进行组合。该项目将由TransformBlock
转换,然后由BroadcastBlock
发送给所有目标。
LinkTo()
的返回值为:
IDisposable
,在致电Dispose
时,会取消源与目标的链接。
这正是您所需要的。只需存储从LinkTo()
返回的值,然后在必要时存储Dispose()
。