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 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.