C#动作块
例子
(foreach)
这个类在逻辑上可以被认为是一个用于处理数据的缓冲区,结合用于处理该数据的任务,“数据流块”管理两者。在最基本的用法中,我们可以实例化一个ActionBlock并向其“发布”数据;在ActionBlock的构造中提供的委托将为发布的每条数据异步执行。
同步计算
var ab = new ActionBlock(i => { Compute(i); }); … ab.Post(1); ab.Post(2); ab.Post(3);
将异步下载限制为最多5个并发
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");
StephenToub对TPL数据流的介绍