微软面向高并发应用而推出的新程序库——TPL Dataflow
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类中的函数二次封装,没有太多的功能,基本上每个函数都只有几行,主要为了使用更加方便罢了,由于实现简单,扩充它也是非常方便的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器