内部ではInterlockedによってスレッドセーフを達成しています。Fine-Grained Locking and Lock-Free Mechanisms - Thread-Safe Collections | Microsoft Learn TryPeek - ConcurrentQueue.cs
ConcurrentQueue<int> queue = new ConcurrentQueue<int>(); queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); int val1, val2, val3, val4, val5; bool r1 = queue.TryDequeue(out val1); // true, 1 bool r2 = queue.TryDequeue(out val2); // true, 2 bool r3 = queue.TryPeek(out val3); // true, 3 bool r4 = queue.TryDequeue(out val4); // true, 3 bool r5 = queue.TryDequeue(out val5); // false, 0
型 | プロパティ | 内容 |
---|---|---|
int | Count | 格納されている要素の数 |
bool | IsEmpty | 格納されている要素がなく、空ならばtrue |
コレクションに要素が含まれているかどうか確認するならば、Countがゼロであるかどうかではなく、このプロパティを用いるようにします。IsEmpty - ConcurrentQueue.cs
メソッド | 機能 |
---|---|
Enqueue(T) | 末尾にオブジェクトを、追加する |
TryDequeue(T) | 先頭にあるオブジェクトを、削除して取得を試みる |
TryPeek(T) | 先頭にあるオブジェクトを、削除せずに取得を試みる |
ToArray() | 要素を新しい配列にコピーできる |