队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue、ConcurrentQueue、BlockingCollection,下面分别介绍一下。
一、Queue
Queue适用范围:单线程的队列,Queue是最简单的队列的一个实现,但是对于多线程的情况它就显得捉襟见肘了,因为它不是线程安全的,下面粗略的写一下用法,这个Demo也是通过参考资料里摘抄下来的:
Queue<string> messageQueue = new Queue<string>();//创建队列
messageQueue.Enqueue("Hello");//向队列里添加元素
messageQueue.Enqueue("World!")
Console.WriteLine(messageQueue.Dequeue());//从队列里取出元素
Console.WriteLine(messageQueue.Dequeue());
二、ConcurrentQueue
ConcurrentQueue很好的解决了Queue的线程不安全的问题,所以它是线程安全,它的应对场景就是多线程了,下面上代码:
ConcurrentQueue<string> concurrentQueue = new ConcurrentQueue<string>();//创建实例
concurrentQueue.Enqueue("Hello");//向队列里添加元素
concurrentQueue.Enqueue("World!");
while(concurrentQueue.TryDequeue(out message))//c'v取出元素
{
Console.WriteLine(message);
}
三、BlockingCollection
BlockingCollection属于功能最强大的一个队列,它不仅对于线程是安全的,而且它还可以定义队列中最多可以有多少个元素,应用场景比如秒杀活动等。下面上代码:
BlockingCollection<string> blockingCollection = new BlockingCollection<string>(2);//创建队列实例,其中2就是代表着此队列中元素个数的最大值
blockingCollection.Add("Hello");//添加元素到队列中
blockingCollection.Add("World!");
blockingCollection.Add("Good");
blockingCollection.Add("Evening!");
blockingCollection.take();//从队列中取出元素
总结:单线程用Queue,多线程用ConcurrentQueue,多线程又要限制元素个数用BlockingCollection。
写的比较急促,后续持续更新。
参考资料:https://dotnetcoretutorials.com/2018/07/29/queues-in-net-core/
写在最后,经过群主同意,可以把QQ交流群:68827666 发出来,我在这个群里,不是管理也不是群主,感兴趣可以进群交流。
网友评论