数据流基础——块的并行处理
问题
假设需要在数据流网格中执行并行处理
解决方案
在默认情况下,没个数据流块彼此独立。当关联两个块时,他们会各自处理,因此,流网格都内置了某种天然的并行机制。
如果要处理更高级的场景,比如有一个处理高强度CPU计算的特殊块,那么可以通过MaxDegreeOfParallelism选项来命令该块并行操作其输入数据。在默认情况下,该选项的值为1,即每个数据流块一次只能处理一份数据。
可以将BoundedCapacity设置为DataflowBlockOptions.Unbounded或者任意大于零的值。下面的示例允许任意数量的任务同时乘以数据
var multiplyBolck=new TransformBlock<int,int>(
item=>item*2,new ExecutionDataflowBlockOptions{
MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded
});
var subtractBlock=new TransformBlock<int,int>(item=>item-2);
multiplyBlock.LinkTo(subtractBlock);