ConcurrentQueue<T>.TryDequeue(T) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Tenta di rimuovere e restituire l'oggetto all'inizio della coda simultanea.
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
Parametri
- result
- T
Quando questo metodo viene restituito, se l'operazione è stata completata correttamente, result
contiene l'oggetto rimosso. Se non sono presenti oggetti disponibili per la rimozione, il valore non è specificato.
Restituisce
true
se un elemento è stato rimosso e restituito correttamente dall'inizio di ConcurrentQueue<T>; in caso contrario, false
.
Commenti
ConcurrentQueue<T> gestisce internamente tutta la sincronizzazione. Se due thread chiamano TryDequeue esattamente nello stesso momento, non viene bloccata nessuna delle due operazioni. Quando viene rilevato un conflitto tra due thread, un thread deve tentare nuovamente di recuperare l'elemento successivo e la sincronizzazione viene gestita internamente.
TryDequeue tenta di rimuovere un elemento dalla coda. Se il metodo ha esito positivo, l'elemento viene rimosso e il metodo restituisce true
; in caso contrario, restituisce false
. Ciò si verifica in modalità atomica in relazione alle altre operazioni sulla coda. Se nella coda è stato inserito codice come q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c");
e due thread tentano contemporaneamente di rimuovere un elemento, un thread rimuoverà dalla coda a
e l'altro thread rimuoverà dalla coda b
. Entrambe le chiamate a TryDequeue restituiranno true
, perché sono stati entrambi in grado di rimuovere un elemento dalla coda. Se ogni thread viene reimpostato per rimuovere dalla coda un elemento aggiuntivo, uno dei thread rimuoverà dalla coda c
e restituirà true
, mentre l'altro thread troverà la coda vuota e restituirà false
.