> ## 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.

# Procedimiento: Creación de una cola de tareas compuesta

> Procedimiento: Creación de una cola de tareas compuesta

## Ejemplo

Una *cola de tareas compuesta* es una cola de tareas formada por partes de otras colas. Las colas de tareas compuestas son útiles cuando una tarea asincrónica necesita llamar a otra, y la finalización de esa tarea es un paso intermedio que no debería malgastar ciclos en el subproceso de finalización. En este caso, se puede crear una cola compuesta. Los puertos de trabajo y de finalización de esta cola compuesta usan ambos el puerto de trabajo de la cola original.

En el ejemplo siguiente se usa el grupo de subprocesos para el trabajo, pero se integran 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.

```c++ theme={null}
void CreatingCompositeQueue()  
{  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::ThreadPool,  
        XTaskQueueDispatchMode::Manual,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Failed to create task queue: 0x%x\r\n", hr);  
        return;  
    }  
  
    XTaskQueuePortHandle workPort;  
  
    // Create a composite queue that uses the work port from  
    // another queue for both the work and the completion ports.  
  
    hr = XTaskQueueGetPort(queue, XTaskQueuePort::Work, &workPort);  
    if (FAILED(hr))  
    {  
        printf("Failed to get work port 0x%x\r\n", hr);  
        XTaskQueueCloseHandle(queue);  
        return;  
    }  
  
    XTaskQueueHandle compositeQueue;  
    hr = XTaskQueueCreateComposite(workPort, workPort, &compositeQueue);  
    if (FAILED(hr))  
    {  
        printf("Failed to create composite queue 0x%x\r\n", hr);  
        XTaskQueueCloseHandle(queue);  
        return;  
    }  
  
    // Use the queue as needed.  
    SubmitCallbacks(compositeQueue);  
  
    // Wait a while for the callbacks to run.  
    Sleep(1000);  
  
    XTaskQueueCloseHandle(compositeQueue);  
    XTaskQueueCloseHandle(queue);  
}  
```

Otra técnica para esto es crear una cola local cuyos tipos de distribución de trabajo y de finalización sean *inmediatos*. Un modo de distribución inmediato no implica ninguna actividad asincrónica en absoluto: distribuye las devoluciones de llamada tan pronto como se envían, como se muestra en el siguiente ejemplo de código.

```c++ theme={null}
void CreatingImmediateQueue()  
{  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::Immediate,  
        XTaskQueueDispatchMode::Immediate,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Failed to create task queue: 0x%x\r\n", hr);  
        return;  
    }  
  
    // Use the queue as needed.  
    SubmitCallbacks(queue);  
  
    // Wait a while for the callbacks to run.  
    Sleep(1000);  
  
    XTaskQueueCloseHandle(queue);  
}  
```

## Consulte también

[Diseño de la cola de tareas](/build/core-features/common/async/async-task-queue-design)


## Related topics

- [Procedimiento: Creación de una cola de tareas manual](/es/build/core-features/common/async/async-task-queue-design-howto/creating-manual-task-queue.md)
- [Procedimiento: Creación de una cola de tareas de grupo de subprocesos](/es/build/core-features/common/async/async-task-queue-design-howto/creating-thread-pool-task-queue.md)
- [Diseño de colas de tareas asincrónicas](/es/build/core-features/common/async/async-task-queue-design.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)
- [Procedimiento: Uso de una cola de tareas con un bucle de mensajes de Windows](/es/build/core-features/common/async/async-task-queue-design-howto/task-queue-windows-msg-loop.md)
