ConcurrentQueue<T>.TryDequeue(T) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Tenta remover e retornar o objeto no início da fila simultânea.
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
Parâmetros
- result
- T
Quando este método retornar, se a operação tiver sido bem-sucedida, result
conterá o objeto removido. Caso nenhum objeto esteja disponível para ser removido, o valor é não especificado.
Retornos
true
se um elemento tiver sido removido e retornado do início do ConcurrentQueue<T> com êxito; caso contrário, false
.
Comentários
ConcurrentQueue<T> manipula toda a sincronização internamente. Se dois threads chamarem TryDequeue precisamente no mesmo momento, nenhuma operação será bloqueada. Quando um conflito é detectado entre dois threads, um thread precisa tentar novamente recuperar o próximo elemento e a sincronização é tratada internamente.
TryDequeue tenta remover um elemento da fila. Se o método for bem-sucedido, o item será removido e o método retornará true
; caso contrário, retornará false
. Isso acontece atomicamente em relação a outras operações na fila. Se a fila foi preenchida com código como q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c");
e dois threads tentam, simultaneamente, remover a fila de um elemento, um thread removerá a fila a
e o outro thread removerá a fila b
. Ambas as chamadas para TryDequeue retornarão true
, porque ambas foram capazes de remover a fila de um elemento. Se cada thread voltar para remover a fila de um elemento adicional, um dos threads removerá a fila c
e retornará true
, enquanto o outro thread encontrará a fila vazia e retornará false
.