> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Diseño de colas de tareas asincrónicas

> Diseño de colas de tareas asincrónicas

En este tema se describe la cola de tareas de Microsoft Game Development Kit (GDK) que se usa junto
con el patrón de diseño asincrónico de Microsoft Game Development Kit (GDK). Una *cola de tareas*
es una API para poner en cola devoluciones de llamada de trabajo y de finalización de tareas. Una cola de tareas puede configurarse en uno de varios modos de distribución diferentes, incluido un mecanismo de distribución manual que puede usar
para administrar cuidadosamente las cargas de trabajo del juego.

## Información general sobre la API de cola de tareas

Una cola de tareas es una composición de dos puertos de cola: un puerto de trabajo y un
puerto de finalización. Estos puertos se agrupan en el mismo objeto porque
a menudo se necesitan ambos: el puerto de trabajo para realizar el trabajo asincrónico y el
puerto de finalización para informar de ello al usuario.

Una cola de tareas se describe de la siguiente manera.

* Contiene dos puertos de cola de tareas.

* Cada puerto de cola de tareas puede tener su propio modo de distribución, que dicta
  cómo se distribuyen los elementos de la cola.

* Los modos de distribución van desde la distribución totalmente automática a través del
  grupo de subprocesos del sistema hasta la distribución totalmente manual, en la que las tareas deben
  eliminarse explícitamente.

* Las devoluciones de llamada pueden enviarse a cualquiera de los puertos de la cola.

* Las colas se representan como identificadores. Los identificadores pueden duplicarse, lo que
  esencialmente incrementa un recuento de referencias en la cola.

Puede configurar cada puerto de la cola de tareas de forma independiente especificando un modo de distribución. Un *modo de distribución* determina cómo se procesan las devoluciones de llamada
puestas en cola en un puerto. Hay varios modos de distribución.

* **Grupo de subprocesos:** las devoluciones de llamada puestas en cola en una cola de grupo de subprocesos se
  ejecutan en el grupo de subprocesos del sistema. El grupo de subprocesos invoca las
  llamadas en paralelo, tomando por turnos una llamada de la cola para ejecutarla
  a medida que los subprocesos del grupo quedan disponibles.

* **Grupo de subprocesos serializado:** las devoluciones de llamada se ponen en cola y se ejecutan en el
  grupo de subprocesos, pero se ejecutan una tras otra en lugar de ejecutarse en paralelo
  en todos los subprocesos del grupo.

* **Manual:** las devoluciones de llamada puestas en cola en una cola manual no se distribuyen
  automáticamente. Corresponde a usted distribuirlas en el subproceso
  que desee. Si usa colas de tareas manuales, debe asegurarse de
  procesar también la cola de mensajes de Windows.

* **Inmediato:** el modo de distribución inmediato no pone nada en cola.
  Ejecuta inmediatamente la llamada en el subproceso que envió la
  devolución de llamada.

Un identificador de cola de tareas es un recurso que puede compartirse. Cerrar el identificador libera
una referencia en la cola. La cola no se destruye realmente hasta que se liberan todas las
referencias. `XTaskQueueDuplicateHandle`,
`XTaskQueueSubmitCallback`, `XTaskQueueSubmitDelayedCallback` y
`XTaskQueueCreateComposite` agregan todos una referencia al identificador de la cola. Esto
significa que la cola no se destruye realmente hasta que todas las devoluciones de llamada
se han completado.

Un identificador de cola de tareas es un recurso por proceso y no puede serializarse ni
usarse fuera del proceso.

### Patrón de uso

El patrón de uso típico de una cola de tareas es el siguiente.

1. Cree un identificador de cola de tareas y, después, especifique los modos de distribución para cada puerto.

2. Si usa la distribución manual, establezca subprocesos específicos de la aplicación para
   llamar a la función de distribución de la cola.

3. Use la cola como parámetro en las llamadas de Microsoft Game Development Kit (GDK) o envíe directamente
   mediante `XTaskQueueCallback`.

4. Opcionalmente, termine la cola de tareas cuando se cierre la aplicación.

### Temas de procedimientos de colas de tareas asincrónicas

En esta sección se proporcionan ejemplos de procedimientos para escenarios comunes de colas de tareas asincrónicas.

## En esta sección

[Creación de una cola de tareas de grupo de subprocesos](/build/core-features/common/async/async-task-queue-design-howto/creating-thread-pool-task-queue)
Proporciona un ejemplo que muestra cómo crear una cola de tareas que distribuya tanto las devoluciones de llamada de trabajo como las de finalización en el grupo de subprocesos del sistema.

[Envío de devoluciones de llamada](/build/core-features/common/async/async-task-queue-design-howto/submitting-callbacks)
Proporciona un ejemplo que muestra cómo se envía una devolución de llamada al puerto de trabajo o al puerto de finalización de una cola de tareas.

[Duplicación de un identificador de cola de tareas](/build/core-features/common/async/async-task-queue-design-howto/duplicating-task-queue-handle)
Proporciona un ejemplo que muestra cómo duplicar un identificador de cola de tareas. Si tiene trabajo de larga duración, puede que quiera duplicar el identificador de la cola de tareas mientras dure el trabajo. De esta manera, cualquiera que llame a `XTaskQueueCloseHandle` no cerrará la cola mientras usted todavía la necesite.

[Creación de una cola de tareas manual](/build/core-features/common/async/async-task-queue-design-howto/creating-manual-task-queue)
Proporciona un ejemplo que muestra cómo crear una cola de tareas procesada manualmente. Crea dos subprocesos STL que distribuyen las llamadas tanto para el puerto de trabajo como para el puerto de finalización.

[Uso de eventos para controlar la distribución manual de colas](/build/core-features/common/async/async-task-queue-design-howto/control-manual-queue-dispatching)
Proporciona un ejemplo que muestra cómo usar una cola de tareas para señalar una variable de condición cuando tiene elementos que distribuir.

[Uso de una cola de tareas con un bucle de mensajes de Windows](/build/core-features/common/async/async-task-queue-design-howto/task-queue-windows-msg-loop)
Proporciona un ejemplo que usa el grupo de subprocesos para el trabajo, pero integra las devoluciones de llamada del puerto de finalización en un procedimiento de ventana de Win32. Este ejemplo también muestra la terminación correcta de una cola de tareas cuando se integra con otro modelo de subprocesos.

[Uso de la cola de tareas del proceso](/build/core-features/common/async/async-task-queue-design-howto/using-process-task-queue)
Proporciona un ejemplo que muestra cómo usar la cola de tareas del proceso. La cola de tareas del proceso predeterminada usa el grupo de subprocesos tanto para la distribución del trabajo como de las finalizaciones.

[Creación de una cola de tareas compuesta](/build/core-features/common/async/async-task-queue-design-howto/creating-composite-task-queue)
Proporciona un ejemplo que usa el grupo de subprocesos para el trabajo, pero integra las devoluciones de llamada del puerto de finalización en una función de devolución de llamada WindowProc de Win32. Este ejemplo también muestra la terminación correcta de una cola de tareas cuando se integra con otro modelo de subprocesos.

[Uso de devoluciones de llamada retrasadas](/build/core-features/common/async/async-task-queue-design-howto/using-delayed-callbacks)
Proporciona un ejemplo que muestra cómo usar devoluciones de llamada retrasadas, invocando 10 devoluciones de llamada, una cada 500 ms. Use una cola de tareas para enviar devoluciones de llamada en el futuro mediante la API `XTaskQueueSubmitDelayedCallback`. De esta manera, puede reintentar una llamada con error después de un breve retraso, o usarla como un temporizador económico para eventos periódicos.

[Uso de un elemento de espera de cola de tareas](/build/core-features/common/async/async-task-queue-design-howto/using-task-queue-waiter)
Proporciona un ejemplo que muestra cómo usar un elemento de espera de cola de tareas. Puede registrar un identificador de kernel de Win32 con una cola de tareas. Su devolución de llamada se enviará a la cola cuando el identificador reciba una señal.

## Documentación de referencia de la API

* [XTaskQueue (contenido de la API)](/reference/system/xtaskqueue/xtaskqueue_members)


## Related topics

- [Modelo de programación asincrónica](/es/build/core-features/common/async/async-programming-model.md)
- [Información general sobre programación asincrónica](/es/build/core-features/common/async/async-toc.md)
- [Ejemplo de limpieza de una cola de tareas](/es/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-cleanup-task-queue.md)
- [Ejemplo de creación de una cola de tareas](/es/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)
- [Ejemplo de distribución de una cola de tareas](/es/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-task-queue.md)
