ActionBlock C# with Example
(foreach) This class can be thought of logically as a buffer for data to be processed combined with tasks for processing that data, with the “dataflow block ” managing both. In its most basic usage, we can instantiate an ActionBlock and “pos” t data to it; the delegate provided at the ActionBlock ’s construction will be executed asynchronously for every piece of data posted. Synchronous Computation var ab = new ActionBlock(i => { Compute(i); }); … ab.Post(1); ab.Post(2); ab.Post(3); Throttling Asynchronous Downloads to at most 5 concurrently var downloader = new ActionBlock(async url => { byte [] imageData = await DownloadAsync(url); Process(imageData); }, new DataflowBlockOptions { MaxDegreeOfParallelism = 5 }); downloader.Post("http://website.com/path/to/images"); downloader.Post("http://another-website.com/path/to/images"); Introduction to TPL Dataflow by Stephen Toub