前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#中Queue 队列的基本使用示例

C#中Queue 队列的基本使用示例

作者头像
郑子铭
发布2023-10-27 15:02:45
3400
发布2023-10-27 15:02:45
举报
文章被收录于专栏:DotNet NB && CloudNative

简介 C# 中的 Queue 是一种基于链表的先进先出 (FIFO) 数据结构。

简单示例

以下是一个简单的 Queue 实例:

代码语言:javascript
复制
/// <summary>
        /// 普通队列
        /// </summary>
        public void QueueShow()
{
            // 创建一个Queue
            Queue<string> queue = new Queue<string>();
 
            // 添加元素到队列中
            queue.Enqueue("Apple");
            queue.Enqueue("Banana");
            queue.Enqueue("Orange");
 
            // 获取队列中的元素数量
            int count = queue.Count;
            Console.WriteLine("队列中的元素数量: " + count);
 
            // 检查队列是否为空
            bool isEmpty = queue.Count == 0;
            Console.WriteLine("队列是否为空: " + isEmpty);
 
            // 访问队列中的第一个元素(不移除)
            string firstElement = queue.Peek();
            Console.WriteLine("队列中的第一个元素: " + firstElement);
 
            // 移除并返回队列中的第一个元素
            string removedElement = queue.Dequeue();
            Console.WriteLine("被移除的元素: " + removedElement);
 
            // 遍历队列中的所有元素
            Console.WriteLine("剩余的元素:");
            foreach (var element in queue)
            {
                Console.WriteLine(element);
            }
        }

  这个示例展示了如何使用C#中的Queue类。首先,我们创建了一个空的Queue对象。然后,使用Enqueue方法将元素添加到队列中。可以使用Count属性获取队列中的元素数量,并使用Peek方法访问队列中的第一个元素(但不移除)。使用Dequeue方法可以移除并返回队列中的第一个元素。最后,可以使用foreach循环遍历队列中的所有元素。

ConcurrentQueue<T> 是 .NET 中一个非常有用的类,它用于在多线程环境中安全地处理队列。下面是一个 ConcurrentQueue<T> 的基本示例:

代码语言:javascript
复制
/// <summary>
        /// 线程安全队列
        /// 如果多个线程同时操作一个队列推荐使用安全队列,因为有可能引起添加队列前数据都是正常的,当出队时数据是null的情况。
        /// </summary>
        public void ConcurrentQueueShow2()
        {
            // 创建一个 ConcurrentQueue 实例
            ConcurrentQueue<int> queue = new ConcurrentQueue<int>();
 
            // 启动一个任务来向队列中添加元素
            Task.Run(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    queue.Enqueue(i);
                    Task.Delay(10).Wait();  // 延迟10ms以模拟实际操作
                }
            });
 
            // 启动另一个任务来从队列中取出元素
            Task.Run(() =>
            {
                while (true)
                {
                    int dequeue;
                    if (queue.TryDequeue(out dequeue))
                    {
                        Console.WriteLine("Dequeued: " + dequeue);
                    }
                    Task.Delay(10).Wait();  // 延迟10ms以模拟实际操作
                }
            });
 
            // 主线程等待任务完成
            Console.ReadKey();
        }

  在这个示例中,我们创建了一个 ConcurrentQueue<int> 对象并启动了两个任务。一个任务向队列中添加元素,另一个任务从队列中取出元素。由于 ConcurrentQueue<T> 是线程安全的,所以这些操作可以在不同的线程上同时进行,而不需要担心竞争条件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档