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 termina, se l'operazione ha esito positivo, result questo metodo contiene l'oggetto rimosso. Se non è disponibile alcun oggetto da rimuovere, il valore non è specificato.

Valori restituiti

true se un elemento è stato rimosso e restituito dall'inizio dell'oggetto ConcurrentQueue<T> correttamente; in caso contrario, false.

Commenti

ConcurrentQueue<T> gestisce tutte le sincronizzazioni internamente. Se due thread chiamano TryDequeue esattamente nello stesso momento, nessuna operazione viene bloccata. Quando viene rilevato un conflitto tra due thread, un thread deve riprovare a 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ò avviene in modo atomico rispetto ad altre operazioni sulla coda. Se la coda è stata popolata con codice come q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); e due thread tentano simultaneamente di rimuovere dalla coda un elemento, un thread dequeuerà a e l'altro thread dequeuerà b. Entrambe le chiamate a TryDequeue restituiranno true, perché erano entrambe in grado di rimuovere dalla coda un elemento. Se ogni thread torna alla coda di un elemento aggiuntivo, uno dei thread rimuoverà la coda c e restituirà true, mentre l'altro thread troverà la coda vuota e restituirà false.

Si applica a

Vedi anche