ConcurrentQueue<T>.TryDequeue(T) メソッド

定義

同時実行キューの先頭にあるオブジェクトの削除と返しを試みます。

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 には削除されたオブジェクトが含まれます。 削除可能なオブジェクトがない場合、値は指定されていません。

返品

要素が削除され、 の先頭から正常に返された場合は a0/& 。それ以外の場合は。

注釈

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を返します。

適用対象

こちらもご覧ください