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

Traite un élément de la file d'attente de tâches pour le port donné.

## Syntaxe

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

### Paramètres

*queue*   \_In\_\
Type : XTaskQueueHandle

File d'attente sur laquelle distribuer le travail.

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

Port à distribuer.

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

Nombre de millisecondes pendant lesquelles attendre l'arrivée de travail avant de retourner false. Vous pouvez passer **INFINITE** pour attendre indéfiniment.

### Valeur de retour

Type : bool

Retourne true si cette fonction a distribué un appel, ou false dans le cas contraire. Cette fonction retourne également false si la file d'attente est arrêtée, même si **INFINITE** est passé comme délai d'expiration.

## Remarques

Vous pouvez passer un délai d'expiration, ce qui amène **XTaskQueueDispatch** à attendre que quelque chose arrive dans la file d'attente.

Si un port de file d'attente de tâches a été créé avec les modes de distribution [XTaskQueueDispatchMode::ThreadPool](/fr/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode), [XTaskQueueDispatchMode::SerializedThreadPool](/fr/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode) ou [XTaskQueueDispatchMode::Immediate](/fr/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode), il distribue automatiquement les rappels. Pour les ports à distribution manuelle, vous devez appeler **XTaskQueueDispatch**. **XTaskQueueDispatch** peut être appelée pour n'importe quel mode de distribution, mais notez qu'un appel est toujours distribué sur le thread qui appelle **XTaskQueueDispatch**.

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/reference/note.gif?s=6c1a4c009b25ad5315c45ce51bc83983" alt="alerte" width="10" height="10" data-path="images/gdk/reference/note.gif" /> **Remarque sur les performances :**\
L'ajout d'un élément à une file d'attente doit se faire sans verrou ni attente afin de satisfaire aux exigences de performances du code en amont. Les API suivantes sont sans verrou :

* [XTaskQueueSubmitCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback)
* [XTaskQueueSubmitDelayedCallback](/fr/reference/system/xtaskqueue/functions/xtaskqueuesubmitdelayedcallback)
* [XTaskQueueDispatch](/fr/reference/system/xtaskqueue/functions/xtaskqueuedispatch), à condition que 0 soit passé pour *timeoutInMs*

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/reference/note.gif?s=6c1a4c009b25ad5315c45ce51bc83983" alt="alerte" width="10" height="10" data-path="images/gdk/reference/note.gif" /> **Remarque sur les performances :**\
Le temps passé par [XTaskQueueDispatch](/fr/reference/system/xtaskqueue/functions/xtaskqueuedispatch) à traiter un élément du port de travail est variable et dépend du travail effectué.
Dans certains cas, le thread appelant peut se bloquer en attendant la fin d'autres travaux système.

L'exemple suivant montre comment utiliser la fonction **XTaskQueueDispatch** pour traiter les éléments de la file d'attente de tâches.

<Note>**SubmitCallback** est une fonction d'assistance définie dans l'exemple de code de la fonction [XTaskQueueSubmitCallback](/fr/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();
}
```

## Configuration requise

**En-tête :** XTaskQueue.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Nettoyer une file d'attente de tâches](/fr/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-cleanup-task-queue)
* [Distribuer une file d'attente de tâches](/fr/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-task-queue)
* [Vue d'ensemble de la bibliothèque XTaskQueue](/fr/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Modèle de programmation asynchrone](/fr/build/core-features/common/async/async-programming-model)
* [Objectifs de conception et améliorations de la programmation asynchrone](/fr/build/core-features/common/async/async-whitepaper)

## Voir aussi

[Membres XTaskQueue](/fr/reference/system/xtaskqueue/xtaskqueue_members)\
[Modèle de programmation asynchrone](/fr/build/core-features/common/async/async-programming-model)\
[Conception de la file d'attente de tâches asynchrones](/fr/build/core-features/common/async/async-task-queue-design)


## Related topics

- [XTaskQueueDispatch](/reference/system/xtaskqueue/functions/xtaskqueuedispatch.md)
- [XTaskQueueDispatchMode](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode.md)
- [XTaskQueuePort](/reference/system/xtaskqueue/enums/xtaskqueueport.md)
- [Making Async Calls](/services/playfab/sdks/c/async.md)
- [Making async calls in the PlayFab Unified SDK](/services/playfab/sdks/unified-sdk/async-model.md)
