zoukankan      html  css  js  c++  java
  • 线程安全的ConcurrentQueue<T>队列

     队列(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()
    复制代码

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

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

  • 相关阅读:
    apache安装错误error: APR not found解决办法
    (总结)Nginx配置文件nginx.conf中文详解
    多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
    x-forwarded-for的深度挖掘
    hashcode与字符串
    千万不要误用 java 中的 HashCode 方法
    浅谈Java中的hashcode方法
    MySQL中concat函数
    mysql prepare语句使用
    修改表结构
  • 原文地址:https://www.cnblogs.com/bile/p/7998451.html
Copyright © 2011-2022 走看看