ConcurrentQueue<T>.TryDequeue(T) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пытается удалить и вернуть объект, находящийся в начале параллельной очереди.
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
Параметры
- result
- T
В случае успешного выполнения операции параметр result
, возвращаемый данным методом, содержит удаленный объект. Если объект, доступный для удаления, не найден, значение не определено.
Возвращаемое значение
Значение true
, если элемент был успешно удален и возвращен из начала ConcurrentQueue<T>; в противном случае — значение false
.
Комментарии
ConcurrentQueue<T> обрабатывает всю синхронизацию внутри системы. Если два потока вызывают TryDequeue в точно один и тот же момент, ни один из этих операций не блокируется. При обнаружении конфликта между двумя потоками один поток должен повторить попытку, чтобы получить следующий элемент, и синхронизация обрабатывается внутренне.
TryDequeue пытается удалить элемент из очереди. Если метод выполнен успешно, элемент удаляется, а метод возвращает true
значение ; в противном случае возвращается false
. Это происходит атомарно по отношению к другим операциям в очереди. Если очередь была заполнена кодом, q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c");
например, и два потока одновременно пытаются вывести элемент из очереди, один поток будет выведен из очереди a
, а другой поток будет выведен b
из очереди . Оба вызова будут возвращать TryDequeuetrue
, так как они оба смогли вывести элемент из очереди. Если каждый поток возвращается к выводу из очереди дополнительного элемента, один из потоков будет выведен из очереди c
и возвращает true
, в то время как другой поток найдет очередь пустой и возвратит false
.