Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 运行时TPL数据流中断LinkTo()_C#_Concurrency_Task Parallel Library_Dataflow_Tpl Dataflow - Fatal编程技术网

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,因为它似乎无法像BufferBlock那样转换元素

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

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

    如果您想对每个目标分别执行转换,那么这正是
    BroadcastBlock
    中的
    cloningFunction
    的作用

    如果要执行一次转换,然后向每个目标发送相同的对象,可以通过将它们链接在一起来组合
    TransformBlock
    BroadcastBlock
    。项目将由
    转换块
    转换,然后由
    广播块
    发送到所有目标

  • 的返回值为:

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

    这正是你需要的。只需存储从
    LinkTo()
    返回的值,然后在必要时存储它


  • BroadcastBlock是唯一可以完成此任务的块吗?我发现添加它会增加开销,因为它只做克隆(应用于我的示例)。我希望能找到一些不会增加这么多开销的东西。2.正是我想要的,谢谢。
    BroadcastBlock
    是唯一一个将每条消息发送到所有目标的内置块吗?是 啊(
    WriteOnceBlock
    也这样做,但它非常有限。)如果
    BroadcastBlock
    的开销对您来说实在太大,那么您必须创建自己的块,将
    TransformBlock
    BroadcastBlock
    结合起来,或者类似的东西。是的,对不起,我外出度假了…谢谢Svick的回答。谢谢你的不可拆分的提示。根据你为什么断开链接,你可能想考虑DATAFOLLIKOPOPTIONS。