I expected the following to produce output from both publishers, but it only produces output from the first one:
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();
I'm obviously missing something fundamental here, any ideas?
You are linking 2 ActionBlock
s to a single TransformBlock
. You should be linking the 2 ActionBlock
s to the BrodcastBlock
and link the BroadcastBlock
to the TransformBlock
.
What you have:
BroadCast => Transfrom => ActionBlock
=> ActionBlock
What you need:
Transfrom => BroadCast => ActionBlock
=> ActionBlock
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With