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 truewartość . W przeciwnym razie zwraca falsewartość . 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 ab. 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 truewartość , natomiast drugi wątek znajdzie kolejkę pustą i zwróci falsewartość .