ConcurrentQueue<T>.TryDequeue(T) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
同時実行キューの先頭にあるオブジェクトの削除と返しを試みます。
public:
bool TryDequeue([Runtime::InteropServices::Out] T % result);
public bool TryDequeue(out T result);
member this.TryDequeue : 'T -> bool
Public Function TryDequeue (ByRef result As T) As Boolean
パラメーター
- result
- T
このメソッドが戻るときに、操作が成功した場合、 result には削除されたオブジェクトが含まれます。 削除可能なオブジェクトがない場合、値は指定されていません。
返品
注釈
ConcurrentQueue<T> は、すべての同期を内部的に処理します。 2 つのスレッドが正確に同じ時点で TryDequeue を呼び出した場合、どちらの操作もブロックされません。 2 つのスレッド間で競合が検出されると、1 つのスレッドが次の要素を取得するために再試行する必要があり、同期は内部的に処理されます。
TryDequeue は、キューから要素を削除しようとします。 メソッドが成功した場合、項目は削除され、メソッドは trueを返します。それ以外の場合は、 falseを返します。 これは、キュー上の他の操作に関してアトミックに発生します。 キューに q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); などのコードが設定され、2 つのスレッドが同時に要素をデキューしようとすると、1 つのスレッドが a デキューされ、もう 1 つのスレッドが bデキューされます。
TryDequeueの両方の呼び出しは、両方とも要素をデキューできたため、trueを返します。 各スレッドが追加の要素をデキューに戻すと、いずれかのスレッドが c をデキューして trueを返しますが、もう一方のスレッドはキューを空にし、 falseを返します。