zoukankan      html  css  js  c++  java
  • 并发系列64章(TPL 数据流(二))第八章

    前言

    续第七章。

    正文

    数据流块的并行处理

    数据流块在网格上本身就是并行的,为什么这么说呢?

    加入有两个数据库,他们链接在一起,然后给他们post数据。

    当数据流块一在运行的时候,数据流块二也在执行,他们是并行的。

    那么我上面说的是数据流块本身并行。也就是说一个数据流块可以同时处理多组数据。

    在Microsoft.Tpl.dataflow 库中仅仅需要设置不限制每次处理数量为1即可:MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded

    var multiplyBlock = new TransformBlock<int, int>(item =>
    {
    	if (item == 1)
    	{
    		throw new InvalidOperationException("not good");
    	}
    	Console.WriteLine("item:" + item);
    	return item * 2;
    },new ExecutionDataflowBlockOptions {
    	MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded
    }
    );
    
    var subtractBlock = new TransformBlock<int, int>(item => {
    	return item - 2;
    });
    
    multiplyBlock.LinkTo(subtractBlock);
    

    创建自定义数据流块

    希望一些重用的程序逻辑在自定义数据流块中可以重用。

    static void Main(string[] args)
    {
    	var newblock=CreateMyCustomBlock();
    	newblock.Post(2);
    	var result = newblock.Receive();
    	Console.WriteLine();
    	Console.ReadKey();
    }
    static IPropagatorBlock<int, int> CreateMyCustomBlock()
    {
    	var multiplyBlock = new TransformBlock<int, int>(item =>
    	{
    		if (item == 1)
    		{
    			throw new InvalidOperationException("not good");
    		}
    		Console.WriteLine("item:" + item);
    		return item * 2;
    	},new ExecutionDataflowBlockOptions {
    		MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded
    	}
    	);
    	var subtractBlock = new TransformBlock<int, int>(item => {
    		return item - 2;
    	});
    	var addBlock = new TransformBlock<int, int>(item =>
    	{
    		return item + 10;
    	});
    	multiplyBlock.LinkTo(subtractBlock);
    	subtractBlock.LinkTo(addBlock);
    	return DataflowBlock.Encapsulate(multiplyBlock,addBlock);
    }
    

    上面的是什麽意思呢?

    实际上就是组装,原本三个窜型的3个数据流块,通过两个端点,组装成一个新的数据流块。

  • 相关阅读:
    遍历datatable的方法
    C# 存储过程使用方法
    C# 存储过程
    dev repositoryItem 手工定义
    无限极分类
    ThinkPHP
    ThinkPHP
    RBAC
    ThinkPHP
    正则表达式
  • 原文地址:https://www.cnblogs.com/aoximin/p/12745453.html
Copyright © 2011-2022 走看看