ConcurrentQueue<T>.TryDequeue(T) Metoda

Definice

Pokusí se odebrat a vrátit objekt na začátku souběžné fronty.

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

Když tato metoda vrátí, pokud operace byla úspěšná, result obsahuje objekt odebraný. Pokud nebyl k dispozici žádný objekt, který by bylo možné odebrat, hodnota není určena.

Návraty

true pokud byl prvek odebrán a vrácen od začátku ConcurrentQueue<T> úspěšně; v opačném případě false.

Poznámky

ConcurrentQueue<T> zpracovává všechny synchronizace interně. Pokud dvě vlákna volají TryDequeue přesně ve stejný okamžik, ani jedna operace není zablokovaná. Při zjištění konfliktu mezi dvěma vlákny se jedno vlákno musí pokusit znovu načíst další prvek a synchronizace je zpracována interně.

TryDequeue se pokusí odebrat prvek z fronty. Pokud je metoda úspěšná, položka se odebere a metoda vrátí true. V opačném případě vrátí false. To se děje atomicky s ohledem na jiné operace ve frontě. Pokud byla fronta naplněna kódem, jako q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); je a dvě vlákna se současně pokusí o odstranění fronty elementu, jedno vlákno se zruší a a druhé vlákno zruší b. Obě volání TryDequeue vrátí true, protože se jim podařilo zrušit zařazení prvku. Pokud se každé vlákno vrátí zpět k odstranění dalšího prvku, jedno z vláken se zruší c a vrátí true, zatímco druhé vlákno bude frontu prázdné a vrátí false.

Platí pro

Viz také