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);
            }
        }
  • 相关阅读:
    java课堂作业(四)
    java听课笔记(五)
    rsync 无密码传输文件
    HTTP返回码总结 (zz)
    打印1到最大的n位数
    两个栈模拟队列
    合并有序数组
    vim MiniBufExplorer 插件
    crontab 定时任务格式
    JNI调用测试
  • 原文地址:https://www.cnblogs.com/robertyao/p/12713510.html
Copyright © 2011-2022 走看看