Why Your Code Has So Much Duplication
Here is a quite nice example code block for C#'s Dataflow blocks, specifically showing usage of the WriteOnceBlock: ActionBlock writeToConsole1 = new ActionBlock ( integer => Console.WriteLine( "Console 1: " + integer ) ); // true if the source should unlink from the target after successfully propagating a single message // otherwise, false to remain connected even after a single message has been propagated bool unlinkAfterOne = false ; WriteOnceBlock writeOnceBlock1 = new WriteOnceBlock ( integer => integer ); writeOnceBlock1.LinkTo( writeToConsole1, unlinkAfterOne ); // prints 12 via Console 1: // Console 1: 12 writeOnceBlock1.Post( 12 ); // create 4 additional Targets ActionBlock writeToConsole2 = new ActionBlock ( integer => Console.WriteLine( "Console 2: " + integer ) ); ActionBlock writeToConsole3 = new ActionBlock ( integer => Console.WriteLine( "Console 3: " + integer ) ); Acti...