消息队列

队列(System.Collections.Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。存储在 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队列的使用的更多相关文章

  1. C#基础---Queue(队列)的应用

       Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...

  2. 第19章 queue队列容器

    /* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...

  3. atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

  4. C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。

    1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...

  5. 实现一个线程安全的Queue队列

    使用装饰者模式实现一个线程安全的Queue队列. public class SynchronizedQueue<E> implements Queue<E>, Serializ ...

  6. Python自动化运维之16、线程、进程、协程、queue队列

    一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...

  7. Stack集合 Queue队列集合 Hashtable哈希表

    Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...

  8. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  9. python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

    今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...

  10. (8)进程---Queue队列

    # IPC Inter-Process Communication # 实现进程之间通信的两种机制: # 管道 Pipe 用的很少 # 队列 Queue 队列的特征:现进先出,栈属于后进后出 基本语法 ...

随机推荐

  1. 转载:scala中的:+\+:\::\:::

    原文链接:https://segmentfault.com/a/1190000005083578 初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. ...

  2. python下浏览器静默运行驱动

    此处以chromdriver为例,放置driver路径问题参看上一篇问题.和java处理差不多,python实现静默运行方式如下 首先解答为什么进行静默运行? 我们在本地一般便于调试可以用GUI界面运 ...

  3. Intellij IDEA 自动清除无效 import 和 清除无效 import 的快捷键

    可以settings-general-auto import-java项,勾选optimize imports on the fly,在当前项目下会自动清除无效的import,而且这个是随时自动清除的 ...

  4. 2019 SDN第四次上机作业

    作业博客链接:http://edu.cnblogs.com/campus/fzu/fzusdn2019/homework/10017 1. 解压安装OpenDayLight控制器(本次实验统一使用Be ...

  5. 14、Docker监控方案(Prometheus+cAdvisor+Grafana)

    上一篇文章我们已经学习了比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控.这节课来学习Prometheus+cAdvisor+Grafana组合. cAdvisor ...

  6. 【解决方案】Chrome崩溃问题解决

    问题描述 出现异常之前做的操作就是,因为换工位的需要,所以关闭电脑,修改网络配置. 问题分析 Firefox和其他应用网络正常 Chrome设置.帮助等选项均打不开 分析,很可能是电脑重启后,Wind ...

  7. Dependency Parsing

    句子的依赖结构表现在哪些单词依赖哪些单词.单词之间的这种关系及可以表示为优先级之间的关系等. Dependency Parsing 通常情况下,对于一个输入句子:\(S=w_{0} w_{1} \do ...

  8. mysql索引原理及优化(二)

    索引原理分析:数据结构 索引是最常见的慢查询优化方式其是一种优化查询的数据结构,MySql中的索引是用B+树实现,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,优化查询. 可以 ...

  9. Gitlab修改用户密码

    sudo gitlab-rails console production > user=User.where(name: "root").first > user.pa ...

  10. SDN实验---Ryu的安装

    一:Ryu是主流SDN开源控制器之一 (一)推文(摘录自) https://ryu.readthedocs.io/en/latest/ https://www.sdnlab.com/1785.html ...