c#Queue队列的使用
消息队列
队列(System.Collections.Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。存储在 Queue(队列) 中的对象在一端插入,从另一端移除。
| 方法名 | 注释 |
| Void Clear() | 从 Queue 中移除所有对象。 |
| Bool Contains(object obj) | 确定某元素是否在 Queue 中。 |
| Object Clone() | 创建 Queue 的浅表副本。 |
| Void CopyTo(Array array,int index) | 从指定数组索引开始将 Queue 元素复制到现有一维 Array 中。 |
| Object Dequeue() | 移除并返回位于 Queue 开始处的对象。 |
| Void Enqueue(object obj) | 将对象添加到 Queue 的结尾处。 |
| Object Peek() | 返回位于 Queue 开始处的对象但不将其移除。 |
| Object[] ToArray() | 将 Queue 元素复制到新数组。 |
| Void TrimToSize() | 将容量设置为 Queue 中元素的实际数目。 |
示例代码:
class Program
{
//定义一个消息队列
static Queue<string> qs = new Queue<string>();
static System.Threading.Timer timer; //处理消息队列中的数据
private static void toDoData(object state)
{
List<string> qsList = new List<string>();
if (qs.Count > )
{
while (true)
{
string item = null;
try
{
//根据先进先出的原则,移除队列中的数据
//如果在调用Dequeue()方法时,队列中不再有元素,就抛出一个InvalidOperationException类型的异常。所以需要try-catch捕获异常
item = qs.Dequeue();
}
catch
{
} if (item != null)
{
qsList.Add(item);
}
else
{
break;
}
} //打印出每次处理的数据
string doResultStr = string.Join(",", qsList);
Console.WriteLine(doResultStr+ "\n");
if (doResultStr.Contains(""))
{
//Timeout.Infinite极大的,把计时器的间隔执行时间设为无穷大,相当于将计时器给暂用了。
timer.Change(,Timeout.Infinite);
}
} } static void Main(string[] args)
{
//每隔一秒执行移除队列
timer = new Timer(toDoData, null, , );
ProductData(); Console.ReadKey(); } //模拟不断返回的数据(现在面临回调函数不断返回数据)
private static void ProductData()
{
for (int i = ; i < ; i++)
{
Thread.Sleep();
//添加数据到队列的末端
qs.Enqueue(string.Format("这是第{0}条数据",i));
} }
}
Dequeue方法执行前:队列包含第22条数据

Dequeue方法执行后:队列移除了第22条数据

item是被移除的数据,开发人员方便对它进行操作

执行结果如下:

c#Queue队列的使用的更多相关文章
- C#基础---Queue(队列)的应用
Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...
- 第19章 queue队列容器
/* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。
1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...
- 实现一个线程安全的Queue队列
使用装饰者模式实现一个线程安全的Queue队列. public class SynchronizedQueue<E> implements Queue<E>, Serializ ...
- Python自动化运维之16、线程、进程、协程、queue队列
一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...
- Stack集合 Queue队列集合 Hashtable哈希表
Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...
- (8)进程---Queue队列
# IPC Inter-Process Communication # 实现进程之间通信的两种机制: # 管道 Pipe 用的很少 # 队列 Queue 队列的特征:现进先出,栈属于后进后出 基本语法 ...
随机推荐
- GoCN每日新闻(2019-10-16)
GoCN每日新闻(2019-10-16) GoCN每日新闻(2019-10-16) 1. 持续的性能分析与优化 https://medium.com/@tvii/continuous-profilin ...
- Flume 测试 Kafka 案例
Flume Kafka 测试案例,Flume 的配置. a1.sources = s1 a1.channels = c1 a1.sinks = k1 a1.sources.s1.type = netc ...
- mysql开放远程连接
1.检查端口是否被监听,没有的话请启动mysql. netstat -atnp | grep 3306 2.检查用户是否具备远程连接,即host字段值不是 % mysql -uroot -p你的密码 ...
- Monkey框架(基础知识篇) - monkey启动与参数介绍
一.monkey启动 直接PC启动:> adb shell monkey [options] <count> shell 端启动:> adb shell >monkey ...
- 第10组 Alpha冲刺(4/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...
- 【软工实践】Beta冲刺(3/5)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 新增数据分析展示等功能API 服务器后端部署,API接口的beta版实现 展示 ...
- javaagent使用指南
今天打算写一下 Javaagent,一开始我对它的概念也比较陌生,后来在别人口中听到 字节码插桩,bTrace,Arthas后面才逐渐了解到Java还提供了这么个工具. JVM启动前静态Instrum ...
- ai segmentation
不只是医学图像啊,自然图像分割用unet也能取得非常好的效果.搞过kaggle语义分割的比赛carvana.感觉最好用的还是unet,其次linknet和提拉米苏也好用.large kernel也不错 ...
- Linux 服务器CPU占用率100%,使用率高解决方案
机器高负载告警一般是CPU负载在99-100%,同时伴有大量的网络出包和入包量,常见的原因是机器在某个时段进行LOG,数据等备份操作,或者服务器被黑导致 输入top命令查看CPU使用情况 top 通过 ...
- flex布局大全 2019
有句话叫做:存在即是合理. 最近很喜欢flex布局模式,不过还在摸索中,这里正一边在项目中使用和总结,也在学习一些大牛们总结的东西和布局思考. 鉴于自己很苦恼,到处去ha资料,真的,就没有一个系统的, ...