using System.Threading.Tasks.Dataflow;
var blockA = new TransformBlock<int, int>(v => {
throw new Exception("Unhandled exception");
Console.WriteLine($"A{v}");
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded });
var blockB = new TransformBlock<int, int>(v => {
Console.WriteLine($"B{v}");
var blockC = new TransformBlock<int, int>(v => {
Console.WriteLine($"C{v}");
var linkOptions = new DataflowLinkOptions { PropagateCompletion = true };
blockA.LinkTo(blockB, linkOptions);
blockB.LinkTo(blockC, linkOptions);
var data = Enumerable.Range(1, 10);
foreach (var seed in data) {
await blockA.SendAsync(seed);
Console.WriteLine($"Pipeline failed with error: {ex.Message}.");
Console.WriteLine("Finished.");