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

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

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

  • 相关阅读:
    获得微软最具影响力开发者(GDI)
    推荐一个制作卡通头像的网站(超强)
    李煜词全集
    15款语言学习2.0网络服务
    SNS社么时候回归社交? !!
    公司附近雪景
    Powershell实践之Discuz!NT自动打包发布
    使用 Office Live 时 Install Office Live Update 1.2出错的解决办法
    修改linux swap空间的swappiness,降低对硬盘的缓存
    TFS "TF30063: 您没有权限访问 MicrosoftIIS/7.0."
  • 原文地址:https://www.cnblogs.com/bile/p/7998451.html
Copyright © 2011-2022 走看看