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"); и двумя потоками одновременно пытается вывести элемент, один поток будет отквечен ab, а другой поток будет выведен из очереди. Оба вызова TryDequeue возвращаются true, так как они оба смогли вывести элемент. Если каждый поток возвращается к отмене дополнительного элемента, один из потоков будет выводить c и возвращатьtrue, в то время как другой поток найдет очередь пустой и вернет.false

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

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