netCore当中的队列Queue、ConcurrentQueu

2019-07-14  本文已影响0人  CareyYang

队列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 发出来,我在这个群里,不是管理也不是群主,感兴趣可以进群交流。

上一篇下一篇

猜你喜欢

热点阅读