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

# XTaskQueueCreate

> XTaskQueueCreate

# XTaskQueueCreate

Crea una cola de tareas, que se puede usar para poner en cola y distribuir llamadas.

## Sintaxis

```cpp theme={null}
HRESULT XTaskQueueCreate(  
         XTaskQueueDispatchMode workDispatchMode,  
         XTaskQueueDispatchMode completionDispatchMode,  
         XTaskQueueHandle* queue  
)  
```

### Parámetros

*workDispatchMode*   \_In\_\
Tipo: [XTaskQueueDispatchMode](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

El modo de distribución para el puerto de "trabajo" de la cola.

*completionDispatchMode*   \_In\_\
Tipo: [XTaskQueueDispatchMode](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

El modo de distribución para el puerto de "finalización" de la cola.

*queue*   \_Out\_\
Tipo: XTaskQueueHandle\*

La cola recién creada.

### Valor devuelto

Tipo: HRESULT

Código de error o de éxito HRESULT.

## Comentarios

<Note>No es seguro llamar a esta función en un subproceso sensible al tiempo. Para obtener más información, consulte [Subprocesos sensibles al tiempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Las colas de tareas son objetos con recuento de referencias. Libere la referencia llamando a [XTaskQueueCloseHandle](/reference/system/xtaskqueue/functions/xtaskqueueclosehandle).

Una cola de tareas tiene puertos de trabajo y de finalización, y las tareas se pueden poner en cola en cualquiera de los dos puertos. Cada puerto se puede configurar con su propio modo de distribución.

En la mayoría de los escenarios, la cola de tareas se crea con la API **XTaskQueueCreate**. Sin embargo, si está encadenando varias llamadas asincrónicas, a veces resulta útil crear una cola compuesta mediante [XTaskQueueCreateComposite](/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite). Considere una API cuya implementación necesita invocar otra API que usa una cola de tareas. Es posible que quiera redirigir la devolución de llamada de finalización de la API para que no bloquee el subproceso de finalización del autor de la llamada. En este caso, puede crear una cola de tareas compuesta cuyos puertos de trabajo y de finalización se crean a partir del puerto de trabajo de otra cola.

En el ejemplo siguiente se crea una cola de tareas que distribuye las devoluciones de llamada de trabajo y de finalización en el grupo de subprocesos del sistema.

<Note>**SubmitCallback** es una función auxiliar que se define en el ejemplo de código de la función [XTaskQueueSubmitCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback).</Note>

```cpp theme={null}
void CreatingTaskQueue()
{
    XTaskQueueHandle queue;
    HRESULT hr = XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool, XTaskQueueDispatchMode::ThreadPool, &queue);
    if (FAILED(hr))
    {
        printf("Creating queue failed: 0x%x\r\n", hr);
        return;
    }

    SubmitCallbacks(queue);

    // Wait a while for the callbacks to run
    Sleep(1000);

    XTaskQueueTerminate(queue, true, nullptr, nullptr);
}
```

En el ejemplo siguiente se crea una cola de tareas de distribución manual. Crea dos subprocesos STL que distribuyen las llamadas para los puertos de trabajo y de finalización.

<Note>**SubmitCallback** es una función auxiliar que se define en el ejemplo de código de la función [XTaskQueueSubmitCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback).</Note>

```cpp theme={null}
void CreatingTaskQueueWithManualThreads()
{
    // Create a manual task queue
    XTaskQueueHandle queue;
    HRESULT hr = XTaskQueueCreate(XTaskQueueDispatchMode::Manual, XTaskQueueDispatchMode::Manual, &queue);
    if (FAILED(hr))
    {
        printf("Creating queue failed: 0x%x\r\n", hr);
        return;
    }

    // We create threads to pump the queue: one for the work port
    // and one for the completion port.
    std::thread workThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Work, INFINITE));
    });

    std::thread completionThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Completion, INFINITE));
    });

    SubmitCallbacks(queue);

    // Wait a while for the callbacks to run
    Sleep(1000);

    // Terminating the queue will cause a waiting DispatchTaskQueue to return
    // false.  
    XTaskQueueTerminate(queue, true, nullptr, nullptr);

    workThread.join();
    completionThread.join();
}
```

## Requisitos

**Encabezado:** XTaskQueue.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Documentación conceptual

* [Crear una cola de tareas](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue)
* [Información general de la biblioteca XTaskQueue](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Modelo de programación asincrónica](/build/core-features/common/async/async-programming-model)
* [Objetivos de diseño y mejoras de la programación asincrónica](/build/core-features/common/async/async-whitepaper)
* [Subprocesos sensibles al tiempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Consulte también

[Miembros de XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members)\
[Modelo de programación asincrónica](/build/core-features/common/async/async-programming-model)\
[Diseño de la cola de tareas asincrónicas](/build/core-features/common/async/async-task-queue-design)


## Related topics

- [XTaskQueueCreateComposite](/es/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite.md)
- [XTaskQueue](/es/reference/system/xtaskqueue/xtaskqueue_members.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)
- [XTaskQueueDispatchMode](/es/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode.md)
- [Realización de llamadas asincrónicas en el SDK unificado de PlayFab](/es/services/playfab/sdks/unified-sdk/async-model.md)
