ConcurrentQueue<T>.TryDequeue(T) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
.