zoukankan      html  css  js  c++  java
  • SaeQueuePool

     internal class SaeQueuePool {
            /// <summary>
            /// SocketAsyncEventArgs可复用队列
            /// </summary>
            private readonly ConcurrentQueue<SocketAsyncEventArgs> _saeQueue;
    
            /// <summary>
            /// 获取队列中的数量
            /// </summary>
            public int Count => _saeQueue.Count;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            public SaeQueuePool(int count) {
                _saeQueue = new ConcurrentQueue<SocketAsyncEventArgs>();
                for (var i = 0; i < count; i++) { 
                    _saeQueue.Enqueue(new SocketAsyncEventArgs()); 
                }
            }
    
            /// <summary>
            /// 取出项
            /// </summary>
            public Task<SocketAsyncEventArgs> Dequeue() {
                return Task.Run(() =>
                 {
                     try
                     {
                         var success = _saeQueue.TryDequeue(out var item);
                         if (!success)
                             item = new SocketAsyncEventArgs();
    
                         item.Completed += Item_Completed;
                         return item; 
                     }
                     catch (System.Exception)
                     {
                         return null;
    
                     }
                 });
            }
    
            /// <summary>
            /// 
            /// </summary>
            private void Item_Completed(object sender, SocketAsyncEventArgs e) {
                e.Completed -= Item_Completed;
                _saeQueue.Enqueue(e);
            }
    
            /// <summary>
            /// 退回项到池中
            /// </summary>
            public void Enqueue(SocketAsyncEventArgs sae) {
                sae.Completed -= Item_Completed;
                _saeQueue.Enqueue(sae);
            }
        }
  • 相关阅读:
    mysql(二)数据类型
    mysql(一)
    MySQL8 安装官方示例 employees 数据库
    Elasticsearch入门
    redis入门
    git 基本使用
    vue-cli4环境变量配置和代理跨域配置
    nginx配置
    彻底搞清浏览器和服务器跨域
    File文件过滤器
  • 原文地址:https://www.cnblogs.com/robertyao/p/12713510.html
Copyright © 2011-2022 走看看