Please note following code sample. I need an aggregator node, that can be linked to any number of sources, waites for all sources to send one message and then combines those in a result[].
This should be obvious and straigt forward, but somehow I do not find a solution. I checked JoinBlock and TransformaterBlock, but both seem unfitting.
using System;
using System.Threading.Tasks.Dataflow;
namespace ConsoleApp2
{
internal class Program
{
private static readonly uint _produceCount = 0;
private static void Main(string[] args)
{
BufferBlock<string> p1 = new BufferBlock<string>();
BufferBlock<string> p2 = new BufferBlock<string>();
// a block is required that accepts n sources as input, waits for all inputs to arrive, and then creates a result array from all inputs
ActionBlock<string[]> c1 = new ActionBlock<string[]>((inputs) =>
{
Console.WriteLine(String.Join(',', inputs));
});
p1.Post("Produce 1.1");
p2.Post("Produce 2.1");
// desired output:
// "Produce 1.1, Produce 2.1"
// actually the order is of no importance at this time
}
}
}
[Edit] Further clarification: I would like to have a block that: - dynamically await all source-notes (at the point in time the first message arrives) to complete and aggregate the result to pass to follower nodes