ConcurrentQueue<T>.TryDequeue(T) Metoda

Definicja

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

Dotyczy

Zobacz też