zoukankan      html  css  js  c++  java
  • ConcurrentQueue对列的基本使用方式

      队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队

      ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据结构。

     1 对列初始化:
     2 
     3 ConcurrentQueue<ApiLogContract> Queue = new ConcurrentQueue<ApiLogContract>();
     4 
     5 /// <summary>
     6 /// 单条入队列
     7 /// </summary>
     8 /// <param name="model">入列模型</param>
     9 
    10 Queue.Enqueue(model);
    11 
    12 
    13 
    14 /// <summary>
    15 /// 多条入队
    16 /// </summary>
    17 /// <param name="list"></param>
    18 
    19 List<ApiLogContract> list = new List<ApiLogContract>();
    20 
    21 list.add(new model{});
    22 
    23 list.add(new model{});
    24 
    25 list.add(new model{});
    26 
    27 list.add(new model{});
    28 
    29 list.ForEach(t => Enqueue(t));
    30 
    31 
    32 
    33 /// <summary>
    34 /// 单条出队
    35 /// </summary>
    36 /// <returns></returns>
    37 
    38 ApiLogContract apiLog = null;
    39 Queue.TryDequeue(out apiLog);
    40 
    41 
    42 
    43 /// <summary>
    44 /// 多条出队
    45 /// </summary>
    46 /// <param name="count">数量</param>
    47 /// <returns></returns>
    48 
    49 var logs = new List<ApiLogContract>();
    50 
    51 if (Queue.Count > 0)
    52 {
    53   for (int i = 0; i < count; i++)
    54   {
    55     var source = Dequeue();
    56     if (source != null)
    57     {
    58       logs.Add(source);
    59     }
    60   }
    61 }
    /// <summary>
    /// 获取对列数量
    /// </summary>
    /// <returns></returns>
    Queue.Count

    /// <summary>
    /// 确定序列是否包含任何元素[用于判断对列是否有要处理的数据]这个方法的性能比Count()方法快
    /// </summary>
    /// <returns></returns>
    Queue.Any()

    以上就是对列的基本使用方法。

    对列的使用场景有很多。所有要异步处理的都可以使用对列的方式。如接口日志异步处理,邮件、短信异步发送等。对列一般配合单例设计模式和线程一起使用更佳。

  • 相关阅读:
    maven 笔记
    面试题53:在排序数组中查找数字
    面试题52:两个链表的第一个公共节点
    面试题51:数组中的逆序对
    面试题50_2:字符流中第一个只出现一次的字符
    面试题50:第一个只出现一次的字符
    面试题49:丑数
    面试题48:最长不含重复字符的连续子字符串
    面试题47:礼物的最大值
    面试题8:二叉树的下一个节点
  • 原文地址:https://www.cnblogs.com/stevenchen2016/p/5397270.html
Copyright © 2011-2022 走看看