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


TransformManyBlock是否是正确的数据流块,以使用元素,对其进行转换,然后输出(将相同数量的元素作为输入输出)给多个使用者(每个链接到使用者的对象都使用相同的元素,例如广播)?我故意不选择BroadCastBlock,因为它似乎无法像BufferBlock一样转换元素。
我想知道如何在运行时取消链接使用者(此处为ActionBlocks)?据我所知,LinkTo()似乎没有提供这种功能。

最佳答案

TransformManyBlock用于将输入中的一项转换为输出中的多项,它与使用者的数量无关。

如果要对每个目标分别执行转换,那么这正是cloningFunction中的BroadcastBlock的目的。

如果要执行一次转换,然后将每个目标发送给同一对象,则可以通过将它们链接在一起来组合TransformBlockBroadcastBlock。该项目将由TransformBlock转换,然后由BroadcastBlock发送到所有目标。
LinkTo()的返回值为:


  一个IDisposable,在调用Dispose后,它将取消源与目标的链接。


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

10-06 12:18