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 に格納されます。 削除できるオブジェクトがない場合、値は指定されません。
戻り値
true の先頭から要素が正常に削除されて返された場合は ConcurrentQueue<T>。それ以外の場合は false。
注釈
ConcurrentQueue<T> は、すべての同期を内部的に処理します。 2 つのスレッドが正確に同じ時点で を呼び出 TryDequeue す場合、どちらの操作もブロックされません。 2 つのスレッド間で競合が検出されると、1 つのスレッドが次の要素を取得するためにもう一度試行する必要があり、同期は内部的に処理されます。
TryDequeue は、キューから要素を削除しようとします。 メソッドが成功した場合、項目は削除され、メソッドは を返 trueします。それ以外の場合は を返します false。 これは、キュー上の他の操作に関してアトミックに発生します。 キューに などの q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); コードが設定され、2 つのスレッドが同時に要素のデキューを試みると、1 つのスレッドがデキュー a され、もう一方のスレッドが デキュー bされます。 の両方の呼び出し TryDequeue は、 要素をデキューできたため、 を返します true。 各スレッドが追加の要素のデキューに戻ると、いずれかのスレッドがデキュー c して を返 trueしますが、もう一方のスレッドはキューを空にし、 を返します false。