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

  

posted @ 2020-04-15 10:13  海风j  阅读(879)  评论(0编辑  收藏  举报