c# – 如何在TPL Dataflow中将多个目标块与源块链接?

我预计以下几个方面可以从两个出版商那里获得产出,但是它只产生第一个输出:
var broadcastBlock = new BroadcastBlock<int>(null);
var transformBlock = new TransformBlock<int,int>(i => i*10);
var publish1 = new ActionBlock<int>(i => Console.WriteLine("Publisher 1:" + i));
var publish2 = new ActionBlock<int>(i => Console.WriteLine("Publisher 2:" + i));

broadcastBlock.LinkTo(transformBlock,new DataflowLinkOptions() { PropagateCompletion = true });
transformBlock.LinkTo(publish1,new DataflowLinkOptions() { PropagateCompletion = true });
transformBlock.LinkTo(publish2,new DataflowLinkOptions() { PropagateCompletion = true });

foreach (var i in Enumerable.Range(0,5))
{
    broadcastBlock.Post(i);
}
broadcastBlock.Complete();
Task.WhenAll(publish1.Completion,publish2.Completion).Wait();

我显然在这里遗漏了一些基本的东西,任何想法?

解决方法

您将2个ActionBlock链接到一个TransformBlock.您应该将2个ActionBlock链接到BrodcastBlock并将BroadcastBlock链接到TransformBlock.

你有什么:

BroadCast => Transfrom => ActionBlock
                       => ActionBlock

你需要什么

Transfrom => BroadCast => ActionBlock
                       => ActionBlock

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...