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

static class DataFlowExtension
    {
        /// <summary>
        ///同步发送所有数据至TargetBlock
        /// </summary>
        public static void PostAll<T>(this ITargetBlock<T> target, IEnumerable<T> source)
        {
            var isSuccess = source.All(i => target.Post(i));
            if (!isSuccess)
            {
                throw new InvalidOperationException();
            }
            target.Complete();
        }

/// <summary>
        ///异步发送所有数据至TargetBlock
        /// </summary>
        public static async Task PostAllAsync<T>(this ITargetBlock<T> target, IEnumerable<T> source)
        {
            foreach (var item in source)
            {
                await target.SendAsync(item);
            }
            target.Complete();
        }
        
        /// <summary>
        ///同步从数据源中获取所有数据
        /// </summary>
        public static IReadOnlyList<T> ReceiveAll<T>(this IReceivableSourceBlock<T> source)
        {
            IList<T> output;
            if (!source.TryReceiveAll(out output))
            {
                throw new InvalidOperationException();
            }

return output as IReadOnlyList<T>;
        }

/// <summary>
        ///异步从数据源中获取所有数据
        /// </summary>
        public static async Task<IReadOnlyList<T>> ReceiveAllAsync<T>(this ISourceBlock<T> source)
        {
            List<T> output = new List<T>();
            while (await source.OutputAvailableAsync())
            {
                output.Add(source.Receive());
            }
            return output;
        }
    }

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

TPL Dataflow库的几个扩展函数相关推荐

  1. TPL Dataflow组件应对高并发,低延迟要求

    长话短说 2C互联网业务增长,单机多核的共享内存模式带来的排障问题.编程困难:随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此actor-based模型又重新受到了人们的重视. -- ...

  2. TPL Dataflow .Net 数据流组件,了解一下?

    作为单体程序,依赖的第三方服务虽不多,但是2C的程序还是有不少内容可讲:作为一个常规互联网系统,无外乎就是接受请求.处理请求,输出响应. 由于业务渐渐增长,数据处理的过程会越来越复杂和冗长,[连贯高效 ...

  3. TPL Dataflow .Net 数据流组件,了解一下?

    回顾上文 作为单体程序,依赖的第三方服务虽不多,但是2C的程序还是有不少内容可讲: 作为一个常规互联网系统,无外乎就是接受请求.处理请求,输出响应. 由于业务渐渐增长,数据处理的过程会越来越复杂和冗长 ...

  4. 在.net 4.0程序中使用TPL Dataflow

    今天写了一个小程序,用到了TPL Dataflow,结果在部署的时候发现了一个问题:客户的服务器中有win2003的机器,2003是不支持.net 4.5的,但TPL Dataflow却只能在.net ...

  5. .Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

    在学习的过程中,看一些一线的技术文档很吃力,而且考虑到国内那些技术牛人英语都不差的,要向他们看齐,所以每天下班都在疯狂地背单词,博客有些日子没有更新了,见谅见谅 什么是TPL? Task Parall ...

  6. 三分钟总览微软任务并行库TPL

    点击上方蓝字进行关注 有小伙伴问我每天忽悠的TPL是什么? ☹️ 这次站位高一点,严肃讲一讲. 引言 俗话说,不想开飞机的程序员不是一名好爸爸:作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀 ...

  7. 数据流(任务并行库 TPL)

    TPL 数据流库向具有高吞吐量和低滞后时间的占用大量 CPU 和 I/O 操作的应用程序的并行化和消息传递提供了基础. 它还能显式控制缓存数据的方式以及在系统中移动的方式. 为了更好地了解数据流编程模 ...

  8. iOS解决两个静态库的冲突 duplicate symbol

    场景: 解决TencentOpenAPI.framework与ZbarSDK中 _base64_encode 函数的冲突 后来在网络上搜寻,删除掉 Other Linker Flag 的 -all_l ...

  9. OPenGL学习--库介绍

    文章目录 一.什么是OpenGL 二.OpenGL的由来 三.工具库 3.1.窗口管理 3.2.glut 3.3.freeglut 3.4.glfw 3.5.函数加载 3.6.glew 3.7.gla ...

最新文章

  1. 图解NumPy:常用函数的内在机制
  2. 转结构体_golang处理gb2312转utf8编码的问题
  3. winfrom保存图片,将文件夹中图片放入listview,与撤回操作
  4. Oracle用户权限
  5. 数据库设计规范(详细)
  6. 人体姿态估计之CPN中文文献翻译
  7. 做微商的朋友们都想知道代购怎么在闲鱼上引流?
  8. Netty详解第二课 Netty进阶和优化
  9. 如何绘制论文中的图表
  10. OpenAVNU 带宽预留协议SRP代码分析
  11. (7)解除预制体关系Break Prefab Instance(Unpack Prefab)
  12. win10系统excel2019快速实现间隔行填充颜色快捷键的方法
  13. 使用Tensorflow 2进行猫狗分类识别
  14. Linux - UAC USB声卡
  15. charles+Proxifier实现抓包pc端(exe程序)
  16. 什么是linux文件句柄,Linux中的“陈旧文件句柄”是什么意思?
  17. 超实用Word技巧分享!这才是使用Word时常用到的高效率方法
  18. Open3D 点云曲率计算
  19. 引水工程--nyoj1239
  20. 图示数学之: 克莱因瓶之谜

热门文章

  1. 【杂谈】从学员到开发者,我在有三AI打怪升级
  2. 【完结】如何掌握基于图像和视频的人脸表情识别,这9篇文章可以作为一个参考...
  3. 为AI摄影铺路,第一个大规模的美学质量数据库
  4. 全球及中国N95级医用防护口罩市场销售规模与产量需求预测报告2022版
  5. 全球及中国静脉器械行业发展形势及前景战略规划建议报告2021-2027年版
  6. 开发ASP.NET Atlas服务器端Extender控件——基本概念以及预先需求
  7. 一个数据仓库时代开始--Hive
  8. PHP易混淆函数的区分
  9. SQL中like的用法
  10. 物联网时代,对产品经理有哪些新的要求?