#unity/日常积累 # ConcurrentQueue 类 - 参考 反馈 [](https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent.concurrentqueue-1?view=net-8.0#definition) ## 定义 命名空间: [System.Collections.Concurrent](https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent?view=net-8.0) 程序集: System.Collections.Concurrent.dll 表示线程安全的先进先出 (FIFO) 集合。 ``` cs public class ConcurrentQueue : System.Collections.Concurrent.IProducerConsumerCollection, System.Collections.Generic.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.ICollection ``` #### 类型参数 T 队列中包含的元素的类型。 继承 [Object](https://learn.microsoft.com/zh-cn/dotnet/api/system.object?view=net-8.0) ``` cs ConcurrentQueue ``` 示例 ``` cs using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks; class CQ_EnqueueDequeuePeek { // Demonstrates: // ConcurrentQueue.Enqueue() // ConcurrentQueue.TryPeek() // ConcurrentQueue.TryDequeue() static void Main () { // Construct a ConcurrentQueue. ConcurrentQueue cq = new ConcurrentQueue(); // Populate the queue. for (int i = 0; i < 10000; i++) { cq.Enqueue(i); } // Peek at the first element. int result; if (!cq.TryPeek(out result)) { Console.WriteLine("CQ: TryPeek failed when it should have succeeded"); } else if (result != 0) { Console.WriteLine("CQ: Expected TryPeek result of 0, got {0}", result); } int outerSum = 0; // An action to consume the ConcurrentQueue. Action action = () => { int localSum = 0; int localValue; while (cq.TryDequeue(out localValue)) localSum += localValue; Interlocked.Add(ref outerSum, localSum); }; // Start 4 concurrent consuming actions. Parallel.Invoke(action, action, action, action); Console.WriteLine("outerSum = {0}, should be 49995000", outerSum); } } ``` ## 注解  备注 [ConcurrentQueue](https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent.concurrentqueue-1?view=net-8.0)[IReadOnlyCollection](https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.ireadonlycollection-1?view=net-8.0)实现从 .NET Framework 4.6 开始的接口;在.NET Framework的早期版本中,[ConcurrentQueue](https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent.concurrentqueue-1?view=net-8.0)类未实现此接口。