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