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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM