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类中的函数二次封装,没有太多的功能,基本上每个函数都只有几行,主要为了使用更加方便罢了,由于实现简单,扩充它也是非常方便的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值