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

# XTaskQueueDispatch

> XTaskQueueDispatch

# XTaskQueueDispatch

Procesa un elemento de la cola de tareas para el puerto especificado.

## Sintaxis

```cpp theme={null}
bool XTaskQueueDispatch(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         uint32_t timeoutInMs  
)  
```

### Parámetros

*queue*   \_In\_\
Tipo: XTaskQueueHandle

La cola en la que se distribuirá el trabajo.

*port*   \_In\_\
Tipo: [XTaskQueuePort](/reference/system/xtaskqueue/enums/xtaskqueueport)

El puerto que se distribuirá.

*timeoutInMs*   \_In\_\
Tipo: uint32\_t

El número de milisegundos que se esperará a que llegue trabajo antes de devolver false. Puede pasar **INFINITE** para esperar indefinidamente.

### Valor devuelto

Tipo: bool

Devuelve true si esta función distribuyó una llamada o false si no lo hizo. Esta función también devolverá false si la cola finaliza, incluso si se pasa **INFINITE** como tiempo de espera.

## Comentarios

Puede pasar un tiempo de espera, lo que hará que **XTaskQueueDispatch** espere a que llegue algo a la cola.

Si un puerto de una cola de tareas se creó con los modos de distribución [XTaskQueueDispatchMode::ThreadPool](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode), [XTaskQueueDispatchMode::SerializedThreadPool](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode) o [XTaskQueueDispatchMode::Immediate](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode), distribuirá las devoluciones de llamada automáticamente. Para los puertos de distribución manual, debe llamar a **XTaskQueueDispatch**. Se puede llamar a **XTaskQueueDispatch** con cualquier modo de distribución, pero tenga en cuenta que las llamadas siempre se distribuyen en el subproceso que llama a **XTaskQueueDispatch**.

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/reference/note.gif?s=6c1a4c009b25ad5315c45ce51bc83983" alt="alerta" width="10" height="10" data-path="images/gdk/reference/note.gif" /> **Nota de rendimiento:**\
Agregar un elemento a una cola debe ser una operación sin bloqueos ni esperas para satisfacer los requisitos de rendimiento del código de niveles superiores. Las siguientes API no usan bloqueos:

* [XTaskQueueSubmitCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback)
* [XTaskQueueSubmitDelayedCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitdelayedcallback)
* [XTaskQueueDispatch](/reference/system/xtaskqueue/functions/xtaskqueuedispatch), siempre que se pase 0 para *timeoutInMs*

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/reference/note.gif?s=6c1a4c009b25ad5315c45ce51bc83983" alt="alerta" width="10" height="10" data-path="images/gdk/reference/note.gif" /> **Nota de rendimiento:**\
La cantidad de tiempo empleada por [XTaskQueueDispatch](/reference/system/xtaskqueue/functions/xtaskqueuedispatch) al procesar un elemento del puerto de trabajo es variable y depende del trabajo que se esté realizando.
En algunos casos, el subproceso que realiza la llamada podría bloquearse a la espera de que se complete otro trabajo del sistema.

En el ejemplo siguiente se muestra cómo usar la función **XTaskQueueDispatch** para procesar elementos de la cola de tareas.

<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

* [Limpiar la cola de tareas](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-cleanup-task-queue)
* [Distribuir la cola de tareas](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-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)

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

- [XTaskQueueDispatchMode](/es/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode.md)
- [XTaskQueuePort](/es/reference/system/xtaskqueue/enums/xtaskqueueport.md)
- [Realizar llamadas asincrónicas en la API de C de XSAPI](/es/services/xbox-services/fundamentals/xbox-services-api/live-flatc-async-patterns.md)
- [Realización de llamadas asincrónicas](/es/services/playfab/sdks/c/async.md)
- [Realización de llamadas asincrónicas en el SDK unificado de PlayFab](/es/services/playfab/sdks/unified-sdk/async-model.md)
