线程安全的ConcurrentQueue队列

 队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队

  ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据结构。

线程安全的ConcurrentQueue<T>队列
 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 }
线程安全的ConcurrentQueue<T>队列
线程安全的ConcurrentQueue<T>队列
/// <summary>
/// 获取对列数量
/// </summary>
/// <returns></returns>
Queue.Count
/// <summary>
/// 确定序列是否包含任何元素[用于判断对列是否有要处理的数据]这个方法的性能比Count()方法快
/// </summary>
/// <returns></returns>
Queue.Any()
线程安全的ConcurrentQueue<T>队列

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

对列的使用场景有很多。所有要异步处理的都可以使用对列的方式。如接口日志异步处理,邮件、短信异步发送等。对列一般配合单例设计模式和线程一起使用更佳。

上一篇:1017 A除以B (20 分)python


下一篇:Node Express 4.0 安装