ConcurrentQueue<T>.TryDequeue(T) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Próbuje usunąć i zwrócić obiekt na początku kolejki współbieżnej.
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
Parametry
- result
- T
Gdy ta metoda zwróci wartość , jeśli operacja zakończyła się pomyślnie, result
zawiera obiekt usunięty. Jeśli żaden obiekt nie był dostępny do usunięcia, wartość jest nieokreślona.
Zwraca
true
jeśli element został usunięty i zwrócony od początku ConcurrentQueue<T> pomyślnie; w przeciwnym razie false
.
Uwagi
ConcurrentQueue<T> obsługuje całą synchronizację wewnętrznie. Jeśli dwa wątki są wywoływane TryDequeue dokładnie w tej samej chwili, żadna operacja nie zostanie zablokowana. Po wykryciu konfliktu między dwoma wątkami jeden wątek musi spróbować ponownie pobrać następny element, a synchronizacja jest obsługiwana wewnętrznie.
TryDequeue próbuje usunąć element z kolejki. Jeśli metoda zakończy się pomyślnie, element zostanie usunięty, a metoda zwróci true
wartość . W przeciwnym razie zwraca false
wartość . Dzieje się to niepodziealnie w odniesieniu do innych operacji w kolejce. Jeśli kolejka została wypełniona kodem, takim jak q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c");
i dwa wątki jednocześnie spróbuje dequeue elementu, jeden wątek zostanie zdequeue, a drugi wątek spowoduje dequeue a
b
. Oba wywołania, które TryDequeue mają wrócić true
, ponieważ oba były w stanie dequeue elementu. Jeśli każdy wątek wróci do kolejki dodatkowego elementu, jeden z wątków spowoduje dequeue c
i zwróci true
wartość , natomiast drugi wątek znajdzie kolejkę pustą i zwróci false
wartość .