Поделиться через


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.

Применяется к

См. также раздел