ConcurrentQueue<T>.TryDequeue(T) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Tente de supprimer et de retourner l'objet au début de la file d'attente simultanée.
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
Paramètres
- result
- T
Quand cette méthode retourne une valeur, si l'opération a réussi, result
contient l'objet supprimé. S'il n'existait aucun objet à supprimer, la valeur n'est pas spécifiée.
Retours
true
si un élément a bien été supprimé et retourné en partant du début de ConcurrentQueue<T> ; sinon, false
.
Remarques
ConcurrentQueue<T> gère toute la synchronisation en interne. Si deux threads appellent TryDequeue exactement au même moment, aucune opération n’est bloquée. Lorsqu’un conflit est détecté entre deux threads, un thread doit réessayer pour récupérer l’élément suivant, et la synchronisation est gérée en interne.
TryDequeue tente de supprimer un élément de la file d’attente. Si la méthode réussit, l’élément est supprimé et la méthode retourne true
; sinon, elle retourne false
. Cela se produit atomiquement par rapport à d’autres opérations sur la file d’attente. Si la file d’attente a été remplie avec du code tel que et que q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c");
deux threads tentent simultanément de mettre en file d’attente un élément, un thread supprime la file d’attente a
et l’autre thread supprime la file d’attente b
. Les deux appels à TryDequeue retournent true
, car ils ont tous deux pu mettre un élément en file d’attente. Si chaque thread retourne à la file d’attente un élément supplémentaire, l’un des threads supprime la file d’attente c
et retourne true
, tandis que l’autre thread trouve la file d’attente vide et retourne false
.