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