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 situado 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 un valor, si la operación se realizó correctamente, result
contiene el objeto que se ha quitado. Si no había ningún objeto para quitar, el valor estará sin especificar.
Devoluciones
Es true
si se quitó y se devolvió correctamente el elemento situado al principio de ConcurrentQueue<T>; en caso contrario, es false
.
Comentarios
ConcurrentQueue<T> controla toda la sincronización internamente. Si dos subprocesos llaman TryDequeue exactamente al mismo momento, ninguna operación se bloquea. Cuando se detecta un conflicto entre dos subprocesos, un subproceso tiene que volver a intentar recuperar el siguiente elemento 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 quitar de la cola un elemento, un subproceso se quitará a
de la cola y el otro subproceso quitará de la cola b
. Ambas llamadas a TryDequeue devolverán true
, porque ambos pudieron quitar de la cola un elemento. Si cada subproceso vuelve a quitar de la cola un elemento adicional, uno de los subprocesos desqueará c
y devolverá true
, mientras que el otro subproceso encontrará la cola vacía y devolverá false
.