首页 > TPL Dataflow库的几个扩展函数

TPL Dataflow库的几个扩展函数

TPL Dataflow是微软面向高并发应用而推出的新程序库。借助于异步消息传递与管道,它可以提供比线程池更好的控制。本身TPL库在DataflowBlock类中提供了不少扩展函数,用起来还是非常方便的,但感觉还是不够全(当然,MS没必要设计大而全的接口),前段时间写个小程序的时候用到了它,当时顺便写了几个扩展函数,这里记录一下,如果后续有扩展再继续补充。

    static class DataFlowExtension

    {

        ///



        ///
同步发送所有数据至TargetBlock

        ///


        public static void PostAll(this ITargetBlock target, IEnumerable source)

        {

            var isSuccess = source.All(i => target.Post(i));

            if (!isSuccess)

            {

                throw new InvalidOperationException();

            }

            target.Complete();

        }



        ///

        ///
异步发送所有数据至TargetBlock

        ///


        public static async Task PostAllAsync(this ITargetBlock target, IEnumerable source)

        {

            foreach (var item in source)

            {

                await target.SendAsync(item);

            }

            target.Complete();

        }

        

        ///

        ///
同步从数据源中获取所有数据

        ///


        public static IReadOnlyList ReceiveAll(this IReceivableSourceBlock source)

        {

            IList output;

            if (!source.TryReceiveAll(out output))

            {

                throw new InvalidOperationException();

            }



            return output as IReadOnlyList;

        }



        ///

        ///
步从数据源中获取所有数据

        ///


        public static async Task<IReadOnlyList> ReceiveAllAsync(this ISourceBlock source)

        {

            List output = new List();

            while (await source.OutputAvailableAsync())

            {

                output.Add(source.Receive());

            }

            return output;

        }

    }

这几个扩展函数本身是对DataflowBlock类中的函数二次封装,没有太多的功能,基本上每个函数都只有几行,主要为了使用更加方便罢了,由于实现简单,扩充它也是非常方便的。

 

更多相关:

  • 关于Graphics也有了基本了解下面想说的的是学这个东东干什么呢,到底如何应用目前常见应用1、验证码(参照网上的)2、打印排版(会提到关于条形码大小设置)3、自定义控件 一、验证码 1 class ValidateCode 2 { 3 #region 定义和初始化配置字段 4...

  •   最近公司在做一个医疗项目,使用WinForm界面作为客户端交互界面。在整个客户端解决方案中。使用了MVP模式实现。由于之前没有接触过该设计模式,所以在项目完成到某个阶段时,将使用MVP的体会写在博客里面。   所谓的MVP指的是Model,View,Presenter。对于一个UI模块来说,它的所有功能被分割为三个部分,分别通过M...

  • 关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体、聚合、值对象的代码,不想多说什么是实体、聚合等概念,相信理论的东西大家已经知晓了。本人对DDD表示好奇,没有在真正项目实践过,甚至也没有看过真正的DDD实践的项目源码,处于极度纠结状态,甚至无法自拔,所以告诫DDD爱好者们,如果要在项目里面实践DD...

  • 前言       写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<>和<>中拷贝出来并参照VC++代码进行整理的,主要是针对HikServ...

  • Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Op...

  • 2019独角兽企业重金招聘Python工程师标准>>> 找到includes/cls_template.php大约1101行/* 在头部加入版本信息 *///$source = preg_replace('//i', "

  • 经常会有有人问到CMake的学习的问题,而且网上也有很多博客是介绍学习CMake 的用法,但是我觉的学习不用这样死板,用到了就顺便学习一下,也就是边做边学,由浅入深,慢慢的就会熟悉了,这个学习的过程中会遇到很多问题,以解决问题的方式驱动自己学习CMake,首先总结一下CMake 的好处,CMake是一个跨平台编译的工具,所以不再需要折...