TPL Dataflow库的几个扩展函数
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库的几个扩展函数相关推荐
- TPL Dataflow组件应对高并发,低延迟要求
长话短说 2C互联网业务增长,单机多核的共享内存模式带来的排障问题.编程困难:随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此actor-based模型又重新受到了人们的重视. -- ...
- TPL Dataflow .Net 数据流组件,了解一下?
作为单体程序,依赖的第三方服务虽不多,但是2C的程序还是有不少内容可讲:作为一个常规互联网系统,无外乎就是接受请求.处理请求,输出响应. 由于业务渐渐增长,数据处理的过程会越来越复杂和冗长,[连贯高效 ...
- TPL Dataflow .Net 数据流组件,了解一下?
回顾上文 作为单体程序,依赖的第三方服务虽不多,但是2C的程序还是有不少内容可讲: 作为一个常规互联网系统,无外乎就是接受请求.处理请求,输出响应. 由于业务渐渐增长,数据处理的过程会越来越复杂和冗长 ...
- 在.net 4.0程序中使用TPL Dataflow
今天写了一个小程序,用到了TPL Dataflow,结果在部署的时候发现了一个问题:客户的服务器中有win2003的机器,2003是不支持.net 4.5的,但TPL Dataflow却只能在.net ...
- .Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow
在学习的过程中,看一些一线的技术文档很吃力,而且考虑到国内那些技术牛人英语都不差的,要向他们看齐,所以每天下班都在疯狂地背单词,博客有些日子没有更新了,见谅见谅 什么是TPL? Task Parall ...
- 三分钟总览微软任务并行库TPL
点击上方蓝字进行关注 有小伙伴问我每天忽悠的TPL是什么? ☹️ 这次站位高一点,严肃讲一讲. 引言 俗话说,不想开飞机的程序员不是一名好爸爸:作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀 ...
- 数据流(任务并行库 TPL)
TPL 数据流库向具有高吞吐量和低滞后时间的占用大量 CPU 和 I/O 操作的应用程序的并行化和消息传递提供了基础. 它还能显式控制缓存数据的方式以及在系统中移动的方式. 为了更好地了解数据流编程模 ...
- iOS解决两个静态库的冲突 duplicate symbol
场景: 解决TencentOpenAPI.framework与ZbarSDK中 _base64_encode 函数的冲突 后来在网络上搜寻,删除掉 Other Linker Flag 的 -all_l ...
- OPenGL学习--库介绍
文章目录 一.什么是OpenGL 二.OpenGL的由来 三.工具库 3.1.窗口管理 3.2.glut 3.3.freeglut 3.4.glfw 3.5.函数加载 3.6.glew 3.7.gla ...
最新文章
- 图解NumPy:常用函数的内在机制
- 转结构体_golang处理gb2312转utf8编码的问题
- winfrom保存图片,将文件夹中图片放入listview,与撤回操作
- Oracle用户权限
- 数据库设计规范(详细)
- 人体姿态估计之CPN中文文献翻译
- 做微商的朋友们都想知道代购怎么在闲鱼上引流?
- Netty详解第二课 Netty进阶和优化
- 如何绘制论文中的图表
- OpenAVNU 带宽预留协议SRP代码分析
- (7)解除预制体关系Break Prefab Instance(Unpack Prefab)
- win10系统excel2019快速实现间隔行填充颜色快捷键的方法
- 使用Tensorflow 2进行猫狗分类识别
- Linux - UAC USB声卡
- charles+Proxifier实现抓包pc端(exe程序)
- 什么是linux文件句柄,Linux中的“陈旧文件句柄”是什么意思?
- 超实用Word技巧分享!这才是使用Word时常用到的高效率方法
- Open3D 点云曲率计算
- 引水工程--nyoj1239
- 图示数学之: 克莱因瓶之谜