Bu erBlock C# with Example
(FIFO Queue: The data that comes in is the data that goes out) In short, BufferBlock provides an unbounded or bounded buffer for storing instances of T. You can “post ” instances of T to the block, which cause the data being posted to be stored in a first-in-first-out (FIFO) order by the block. You can “receive ” from the block, which allows you to synchronously or asynchronously obtain instances of T previously stored or available in the future (again, FIFO). Asynchronous Producer/Consumer with a Throttled Producer // Hand-off through a bounded BufferBlock private static BufferBlock _Buffer = new BufferBlock( new DataflowBlockOptions { BoundedCapacity = 10 }); // Producer private static async void Producer() { while(true) { await _Buffer.SendAsync(Produce()); } } // Consumer private static async Task Consumer() { while(true) { Process(await _Buffer.ReceiveAsync()); } } // Start the Producer and Consumer private static async Task Run() { await Task.WhenAll(Producer(), Consumer()); } Introduction to TPL Dataflow by Stephen Toub