ActionBlockT
(的 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");