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