Condividi tramite


ConcurrentQueue<T>.TryDequeue(T) Metodo

Definizione

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.

Si applica a

Vedi anche