Channel简单使用

导读:本篇文章讲解 Channel简单使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Channel 是啥与其作用

查看官网介绍

https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.channels.channel-1?view=net-6.0

code:

using System.Collections.Generic;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Linq;
namespace QzjcService.Helper
{

    public class ChannelHelper<T>
    {
        private static Channel<T> channel;
        private static readonly object lockobj = new object();
        static ChannelHelper()
        {
            channel = Channel.CreateBounded<T>(10000);//创建有限容量的channel
            //channel = Channel.CreateUnbounded<T>();////创建无限容量的channel,看电脑配置了
        }


        public static Channel<T> CreateChannelInstals()
        {
            if (channel == null)
            {
                lock (lockobj)
                {
                    if (channel == null)
                    {
                        channel = Channel.CreateBounded<T>(10000);
                    }
                }
            }
            return channel;
        }

        /// <summary>
        /// 入队通道
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static async Task<bool> EnQueueByChannel(T entity)
        {
            try
            {
                var _channel = CreateChannelInstals();
                await _channel.Writer.WriteAsync(entity);
                return true;
            }
            catch (System.Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 出队通道, 返回一个对象
        /// </summary>
        /// <returns></returns>
        public static async Task<T> DeQueueByChannelSingalObject()
        {
            try
            {
                var _channel = CreateChannelInstals();
                var entity = await _channel.Reader.ReadAsync();
                return entity != null ? (T)entity : default;
            }
            catch (System.Exception)
            {
                return default;
            }
        }

    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63959.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!