C# 运行时TPL数据流中断LinkTo()
我有一个C# 运行时TPL数据流中断LinkTo(),c#,concurrency,task-parallel-library,dataflow,tpl-dataflow,C#,Concurrency,Task Parallel Library,Dataflow,Tpl Dataflow,我有一个TransformManyBlock,在运行时通过LinkTo(…)添加使用者(操作块) TransformManyBlock是否是正确的数据流块,用于消费元素、转换元素,然后输出(输出的元素数与输入数相同)给多个消费者(每个链接到消费者的元素数与广播数相同)?我故意不选择BroadCastBlock,因为它似乎无法像BufferBlock那样转换元素 我想知道如何在运行时取消消费者(此处为ActionBlocks)的链接?就我所见,LinkTo()似乎没有提供这样的功能 Transfo
TransformManyBlock
,在运行时通过LinkTo(…)
添加使用者(操作块)
TransformManyBlock
用于将输入上的一个项目转换为输出上的多个项目,它与消费者的数量无关
如果您想对每个目标分别执行转换,那么这正是BroadcastBlock
中的cloningFunction
的作用
如果要执行一次转换,然后向每个目标发送相同的对象,可以通过将它们链接在一起来组合TransformBlock
和BroadcastBlock
。项目将由转换块
转换,然后由广播块
发送到所有目标IDisposable
,在调用Dispose
时,它将取消源与目标的链接
这正是你需要的。只需存储从LinkTo()
返回的值,然后在必要时存储它BroadcastBlock是唯一可以完成此任务的块吗?我发现添加它会增加开销,因为它只做克隆(应用于我的示例)。我希望能找到一些不会增加这么多开销的东西。2.正是我想要的,谢谢。
BroadcastBlock
是唯一一个将每条消息发送到所有目标的内置块吗?是 啊(WriteOnceBlock
也这样做,但它非常有限。)如果BroadcastBlock
的开销对您来说实在太大,那么您必须创建自己的块,将TransformBlock
和BroadcastBlock
结合起来,或者类似的东西。是的,对不起,我外出度假了…谢谢Svick的回答。谢谢你的不可拆分的提示。根据你为什么断开链接,你可能想考虑DATAFOLLIKOPOPTIONS。