Compartilhar via


ConcurrentQueue<T>.TryDequeue(T) Método

Definição

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.

Aplica-se a

Confira também