ConcurrentQueue隊列的基本使用方式

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

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

複製代碼
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()
複製代碼

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

對列的使用場景有不少。全部要異步處理的均可以使用對列的方式。如接口日誌異步處理,郵件、短信異步發送等。對列通常配合單例設計模式和線程一塊兒使用更佳。數據結構

相關文章
相關標籤/搜索