C#动作块

例子

(foreach)

这个类在逻辑上可以被认为是一个用于处理数据的缓冲区,结合用于处理该数据的任务,“数据流块”管理两者。在最基本的用法中,我们可以实例化一个 ActionBlock 并向其“发布”数据;在 ActionBlock 的构造中提供的委托将为发布的每条数据异步执行。

同步计算

var ab = new ActionBlock<TInput>(i => 
{
    Compute(i);
});
…
ab.Post(1);
ab.Post(2);
ab.Post(3);

将异步下载限制为最多 5 个并发

var downloader = new ActionBlock<string>(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");

Stephen Toub 对 TPL 数据流的介绍