• ConcurrentQueue对列


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

    • IsEmpty  获取一个值,判断是否为空
    • Count  获取包含的元素数
    • Enqueue(T item)  将对象添加到队列的结尾处
    • TryDequeue(out T result)  尝试移除并返回并发队列开头处的对象
    • TryPeek(out T result)  尝试返回开头处的对象但不将其移除
    • ElementAt(int index)  返回序列中的指定索引处的元素
    using System;
    using System.Collections.Concurrent;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace TestConcurrentQueue
    {
        class Program
        {
            static void Main(string[] args)
            {
                //ConcurrentQueue 表示线程安全的先进先出 (FIFO) 集合
                ConcurrentQueue<Employee> currendQueue = new ConcurrentQueue<Employee>();
                Employee empOne = , "市场部");
                Employee empTwo = , "技术部");
                Employee empThree = , "市场部");
                //Enqueue(T item) 将对象添加到结尾处
                currendQueue.Enqueue(empOne);
                currendQueue.Enqueue(empTwo);
                currendQueue.Enqueue(empThree);
     
                //获取包含的元素数
                )
                {
                    //TryDequeue(out T result) 尝试移除并返回并发队列开头处的对象
                    currendQueue.TryDequeue(out Employee employee);
                    Console.WriteLine(employee);
     
                    )
                    {
                        ; i < currendQueue.Count; i++)
                        {
                            Employee emp = currendQueue.ElementAt(i);
                            Console.WriteLine(emp);
                        }
                    }
                }
            }
        }
     
        /// <summary>
        /// 雇员类
        /// </summary>
        class Employee
        {
            /// <summary>
            /// 雇员姓名
            /// </summary>
            public string EmpName { get; set; }
            /// <summary>
            /// 雇员性别
            /// </summary>
            public string EmpSex { get; set; }
            /// <summary>
            /// 雇员年龄
            /// </summary>
            public int EmpAge { get; set; }
            /// <summary>
            /// 雇员部门
            /// </summary>
            public string DeptName { get; set; }
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="empName"></param>
            /// <param name="empSex"></param>
            /// <param name="empAge"></param>
            /// <param name="deptName"></param>
            public Employee(string empName, string empSex, int empAge, string deptName)
            {
                EmpName = empName;
                EmpSex = empSex;
                EmpAge = empAge;
                DeptName = deptName;
            }
     
            public override string ToString()
            {
                return "Employee[EmpName=" + EmpName + ",EmpSex=" + EmpSex + ",EmpAge=" + EmpAge + ",DeptName=" + DeptName + "]";
            }
        }
    }
    /// <summary>
    /// 获取对列数量
    /// </summary>
    /// <returns></returns>
    Queue.Count
     
     
    /// <summary>
    /// 确定序列是否包含任何元素[用于判断对列是否有要处理的数据]这个方法的性能比Count()方法快
    /// </summary>
    /// <returns></returns>
    Queue.Any()

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

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

    文章参考:https://www.cnblogs.com/stevenchen2016/p/5397270.html   https://www.bbsmax.com/A/A2dmg67gJe/   https://blog.csdn.net/liunianqingshi/article/details/79025818

      

  • 相关阅读:
    HDU2054_A == B ?【模拟题】【大数】【水的问题】
    hadoop结构出现后format变态
    jquery的clone办法bug修复
    Django学习笔记(三)—— 型号 model
    华夏的理财30天A和华夏财富宝货币哪个收益比较好?
    网贷平台公司 必看
    网贷平台 平安 陆金所
    网贷平台公司 各平台投资收费比较
    2012年网贷平台全国排名
    新进网贷的小散 感受
  • 原文地址:https://www.cnblogs.com/whitebai/p/12703487.html
Copyright © 2020-2023  润新知