ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ConcurrentQueue对列的基本使用方式

2019-01-30 09:00:26  阅读:272  来源: 互联网

标签:方式 list Queue add new model 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()
复制代码

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

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

标签:方式,list,Queue,add,new,model,ConcurrentQueue,对列
来源: https://www.cnblogs.com/wwwbdabc/p/10336653.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有