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

相关文章

文章浏览阅读6.2k次,点赞2次,收藏3次。C#数学运算表达式解...
文章浏览阅读5.2k次,点赞6次,收藏7次。程序要做到用户配置...
文章浏览阅读9k次。错误信息检测到 ContextSwitchDeadlock M...
文章浏览阅读2w次,点赞10次,收藏9次。我发生错误时的环境:...
文章浏览阅读9.8k次。C# 二进制字节流查找函数IndexOf ...
文章浏览阅读2.5w次,点赞3次,收藏9次。c#DataGridView数据...