ConcurrentQueue隊列的基本使用方式


 隊列(Queue)代表了一個先進先出的對象集合。當您需要對各項進行先進先出的訪問時,則使用隊列。當您在列表中添加一項,稱為入隊,當您從列表中移除一項時,稱為出隊

  ConcurrentQueue<T>隊列是一個高效的線程安全的隊列,是.Net Framework 4.0,System.Collections.Concurrent命名空間下的一個數據結構。

復制代碼
 1 對列初始化:
 2 
 3 ConcurrentQueue<ApiLogContract> Queue = new ConcurrentQueue<ApiLogContract>();
 4 
 5 /// <summary>
 6 /// 單條入隊列
 7 /// </summary>
 8 /// <param name="model">入列模型</param>
 9 
10 Queue.Enqueue(model);
11 
12 
13 
14 /// <summary>
15 /// 多條入隊
16 /// </summary>
17 /// <param name="list"></param>
18 
19 List<ApiLogContract> list = new List<ApiLogContract>();
20 
21 list.add(new model{});
22 
23 list.add(new model{});
24 
25 list.add(new model{});
26 
27 list.add(new model{});
28 
29 list.ForEach(t => Enqueue(t));
30 
31 
32 
33 /// <summary>
34 /// 單條出隊
35 /// </summary>
36 /// <returns></returns>
37 
38 ApiLogContract apiLog = null;
39 Queue.TryDequeue(out apiLog);
40 
41 
42 
43 /// <summary>
44 /// 多條出隊
45 /// </summary>
46 /// <param name="count">數量</param>
47 /// <returns></returns>
48 
49 var logs = new List<ApiLogContract>();
50 
51 if (Queue.Count > 0)
52 {
53   for (int i = 0; i < count; i++)
54   {
55     var source = Dequeue();
56     if (source != null)
57     {
58       logs.Add(source);
59     }
60   }
61 }
復制代碼
復制代碼
/// <summary>
/// 獲取對列數量
/// </summary>
/// <returns></returns>
Queue.Count

/// <summary>
/// 確定序列是否包含任何元素[用於判斷對列是否有要處理的數據]這個方法的性能比Count()方法快
/// </summary>
/// <returns></returns>
Queue.Any()
復制代碼

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

對列的使用場景有很多。所有要異步處理的都可以使用對列的方式。如接口日志異步處理,郵件、短信異步發送等。對列一般配合單例設計模式和線程一起使用更佳。


免責聲明!

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



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