ConcurrentQueue<T>.TryDequeue(T) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Intenta quitar y devolver el objeto al principio de la cola 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
Cuando este método devuelve, si la operación se realizó correctamente, result contiene el objeto quitado. Si no hay ningún objeto disponible para quitarse, el valor no se especifica.
Devoluciones
true es si se quitó un elemento y se devolvió desde el principio de ConcurrentQueue<T> correctamente; de lo contrario, false.
Comentarios
ConcurrentQueue<T> controla toda la sincronización internamente. Si dos subprocesos llaman TryDequeue exactamente al mismo momento, no se bloquea ninguna operación. Cuando se detecta un conflicto entre dos subprocesos, un subproceso debe intentarlo de nuevo para recuperar el elemento siguiente y la sincronización se controla internamente.
TryDequeue intenta quitar un elemento de la cola. Si el método se ejecuta correctamente, el elemento se quita y el método devuelve true; de lo contrario, devuelve false. Esto sucede de forma atómica con respecto a otras operaciones de la cola. Si la cola se ha rellenado con código como q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); y dos subprocesos al mismo tiempo intentan desen colar un elemento, un subproceso desqueuerá a y el otro subproceso desqueuerá b. Ambas llamadas a TryDequeue devolverán true, porque ambos pudieron poner en cola un elemento. Si cada subproceso vuelve a descuar un elemento adicional, uno de los subprocesos desconeará c y devolverá true, mientras que el otro subproceso encontrará la cola vacía y devolverá false.