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
Pokud tato metoda vrátí, pokud operace byla úspěšná, result obsahuje objekt odebrán. Pokud nebyl k dispozici žádný objekt, který by bylo možné odebrat, hodnota není zadána.
Návraty
true pokud byl prvek odebrán a vrácen od začátku ConcurrentQueue<T> úspěšně; jinak , false.
Poznámky
ConcurrentQueue<T> zpracovává veškerou synchronizaci interně. Pokud dvě vlákna volají TryDequeue přesně ve stejný okamžik, žádná operace není blokována. Když se zjistí konflikt mezi dvěma vlákny, musí se jedno vlákno pokusit znovu načíst další prvek a synchronizace se zpracuje interně.
TryDequeue se pokusí odebrat prvek z fronty. Pokud je metoda úspěšná, položka je odebrána 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 se fronta naplnila kódem, například q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); a dvěma vlákny současně, pokusí se dequeue elementu, jedno vlákno dequeue a a druhé vlákno dequeue b. Obě volání, která se TryDequeue mají vrátit true, protože oba byli schopni odložit prvek. Pokud se každé vlákno vrátí zpět k vyřazení dalšího prvku, jeden z vláken se dequeue c a vrátí true, zatímco druhé vlákno najde frontu prázdnou a vrátí false.