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 队列的特征:现进先出,栈属于后进后出 基本语法 ...
随机推荐
- Kubernetes Pod概述
Pod简介 Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程. 一个Pod封装一个应用容器,Pod代表部署的一个单位. Pods提供两种共享资源: ...
- plsql 如何导入excel数据?
oracle 导入excel数据? 通过plsql实现 1.准备工作 Excel中的字段名称,必须和表结构字段一 一对应 下面以tdoctor_apply表为例,进行演示 表结构 Excel表数据 ...
- Runtime Only和Runtime + Compiler
如果你需要在客户端编译模板 (比如传入一个字符串给 template 选项,或挂载到一个元素上并以其 DOM 内部的 HTML 作为模板),就将需要加上编译器,即完整版 当使用 vue-loader ...
- MySQL Group By 实例讲解(二)
mysql group by使用方法实例讲解 MySQL中GROUP BY语句用于对某个或某些字段查询分组,并返回这个字段重复记录的第一条,也就是每个小组(无排序)里面的第一条. 本文章通过实例向大家 ...
- Dictionary导致IIS CPU 100%案例分析 学会使用WinDbg工具
.NET 开发注意 线程安全性问题.弄不好可能会导致CPU满载 特别主要 Dictionary作为静态变量使用的情况. 解决方法: Dictionary 换成 ConcurrentDictiona ...
- Linux 常用操作和命令
腾讯云部署 java web 环境:https://blog.csdn.net/niceLiuSir/article/details/78879844 Tomcat部署和配置:https://blog ...
- Cucumber介绍
Cucumber是一个提供能让我们都理解的普通语言,通过普通语言来描述的测试用例,并支持行为驱动开发的测试工具.Cucumber支持大多数变成语言,如Ruby.Java和Python等. 官方地址:h ...
- python中pygame游戏打包为exe文件
pyinstaller打包游戏的方法: 1.在命令窗口安装pyinstaller ->pip install pyinstaller 2.查看安装的版本信息 pyinstaller -v 3.进 ...
- 【tensorflow基础】TensorFlow查看GPU信息
re 1. TensorFlow查看GPU信息; end
- golang 基于channel封装资源池(可用于封装redis、mq连接池)
package pool import ( "errors" "io" "sync" "time" ) var ( Er ...