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
作者:whitebbai
个性签名:古之成大事者,不惟有超世之才,亦必有坚韧不拔之志
三省吾身:自古盘古开天,三皇定国,五帝开疆,凡国遇大事,男必在祀与戎,
泯躯祭国,即燹骨成丘,溢血成河,亦不可辱国之土,丧国之疆,
士披肝沥胆,将寄身刀锋,帅槊血满袖,王利刃辉光, 吾不分老幼尊卑,
不分先后贵贱,必同心竭力,倾黄河之水,决东海之波,征胡虏之地,剿倭奴之穴,
讨欺吾之寇,伐蛮夷之戮,遂沧海横流,儿立身无愧,任尸覆边野,唯精魂可依。
泯躯祭国,即燹骨成丘,溢血成河,亦不可辱国之土,丧国之疆,
士披肝沥胆,将寄身刀锋,帅槊血满袖,王利刃辉光, 吾不分老幼尊卑,
不分先后贵贱,必同心竭力,倾黄河之水,决东海之波,征胡虏之地,剿倭奴之穴,
讨欺吾之寇,伐蛮夷之戮,遂沧海横流,儿立身无愧,任尸覆边野,唯精魂可依。