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

# Conception de la file d'attente de tâches asynchrones

> Conception de la file d'attente de tâches asynchrones

Cette rubrique décrit la file d'attente de tâches du Microsoft Game Development Kit (GDK) utilisée
conjointement avec le modèle de conception asynchrone du Microsoft Game Development Kit (GDK). Une *file d'attente de tâches*
est une API permettant de mettre en file d'attente du travail et des rappels de tâches d'achèvement. Une file d'attente de tâches peut être configurée dans l'un de plusieurs modes de distribution, notamment un mécanisme de distribution manuelle que vous pouvez utiliser
pour gérer avec précision les charges de travail des jeux.

## Vue d'ensemble de l'API de file d'attente de tâches

Une file d'attente de tâches est un composite de deux ports de file d'attente : un port de travail et un
port d'achèvement. Ces ports sont regroupés dans le même objet, car vous
avez souvent besoin des deux : le port de travail pour effectuer le travail asynchrone et le
port d'achèvement pour en informer l'utilisateur.

Une file d'attente de tâches se décrit comme suit.

* Elle contient deux ports de file d'attente de tâches.

* Chaque port de file d'attente de tâches peut avoir son propre mode de distribution, qui détermine
  la façon dont les éléments de la file d'attente sont distribués.

* Les modes de distribution vont de la distribution entièrement automatique via le
  pool de threads système à la distribution entièrement manuelle, où les tâches doivent être
  retirées explicitement.

* Des rappels peuvent être soumis à l'un ou l'autre des ports de la file d'attente.

* Les files d'attente sont représentées par des handles. Les handles peuvent être dupliqués, ce qui
  revient essentiellement à augmenter un nombre de références sur la file d'attente.

Vous pouvez configurer indépendamment chaque port de file d'attente de tâches en spécifiant un mode de distribution. Un *mode de distribution* détermine la façon dont les rappels
mis en file d'attente sur un port sont traités. Il existe plusieurs modes de distribution.

* **Thread Pool (pool de threads) :** les rappels mis en file d'attente dans une file de pool de threads sont
  exécutés sur le pool de threads système. Le pool de threads appelle les
  appels en parallèle, en prenant tour à tour un appel à exécuter dans la file d'attente
  à mesure que des threads du pool deviennent disponibles.

* **Serialized Thread Pool (pool de threads sérialisé) :** les rappels sont mis en file d'attente et exécutés sur le
  pool de threads, mais ils s'exécutent l'un après l'autre au lieu de s'exécuter en parallèle
  sur tous les threads du pool.

* **Manual (manuel) :** les rappels mis en file d'attente dans une file manuelle ne sont pas distribués
  automatiquement. C'est à vous de les distribuer sur le thread
  de votre choix. Si vous utilisez des files d'attente de tâches manuelles, vous devez vous assurer de
  pomper également la file d'attente de messages Windows.

* **Immediate (immédiat) :** le mode de distribution immédiat ne met rien en file d'attente. Il
  exécute immédiatement l'appel sur le thread qui a soumis le
  rappel.

Un handle de file d'attente de tâches est une ressource partageable. La fermeture du handle libère
une référence sur la file d'attente. La file d'attente n'est réellement détruite que lorsque toutes les
références ont été libérées. `XTaskQueueDuplicateHandle`,
`XTaskQueueSubmitCallback`, `XTaskQueueSubmitDelayedCallback` et
`XTaskQueueCreateComposite` ajoutent tous une référence au handle de file d'attente. Cela
signifie que la file d'attente n'est réellement détruite qu'une fois tous les rappels
terminés.

Un handle de file d'attente de tâches est une ressource propre au processus et ne peut pas être marshalé ni
utilisé en dehors du processus.

### Modèle d'utilisation

Le modèle d'utilisation typique d'une file d'attente de tâches est le suivant.

1. Créez un handle de file d'attente de tâches, puis spécifiez les modes de distribution de chaque port.

2. Si vous utilisez la distribution manuelle, établissez des threads propres à l'application pour
   appeler la fonction de distribution de la file d'attente.

3. Utilisez la file d'attente comme paramètre des appels du Microsoft Game Development Kit (GDK) ou soumettez
   directement à l'aide de `XTaskQueueCallback`.

4. Vous pouvez éventuellement arrêter la file d'attente de tâches lorsque votre application s'arrête.

### Rubriques de procédures relatives à la file d'attente de tâches asynchrones

Cette section fournit des exemples de procédures pour des scénarios courants de file d'attente de tâches asynchrones.

## Dans cette section

[Création d'une file d'attente de tâches de pool de threads](/fr/build/core-features/common/async/async-task-queue-design-howto/creating-thread-pool-task-queue)
Fournit un exemple qui montre comment créer une file d'attente de tâches qui distribue les rappels de travail et d'achèvement sur le pool de threads système.

[Soumission de rappels](/fr/build/core-features/common/async/async-task-queue-design-howto/submitting-callbacks)
Fournit un exemple qui montre comment un rappel est soumis au port de travail ou au port d'achèvement d'une file d'attente de tâches.

[Duplication d'un handle de file d'attente de tâches](/fr/build/core-features/common/async/async-task-queue-design-howto/duplicating-task-queue-handle)
Fournit un exemple qui montre comment dupliquer un handle de file d'attente de tâches. Si vous avez un travail de longue durée, vous pouvez dupliquer le handle de la file d'attente de tâches pour la durée de ce travail. Ainsi, quiconque appelle `XTaskQueueCloseHandle` ne fermera pas la file d'attente tant que vous en avez encore besoin.

[Création d'une file d'attente de tâches manuelle](/fr/build/core-features/common/async/async-task-queue-design-howto/creating-manual-task-queue)
Fournit un exemple qui montre comment créer une file d'attente de tâches pompée manuellement. Il crée deux threads STL qui distribuent les appels pour le port de travail et le port d'achèvement.

[Utilisation d'événements pour contrôler la distribution d'une file d'attente manuelle](/fr/build/core-features/common/async/async-task-queue-design-howto/control-manual-queue-dispatching)
Fournit un exemple qui montre comment utiliser une file d'attente de tâches pour signaler une variable de condition lorsqu'elle contient des éléments à distribuer.

[Utilisation d'une file d'attente de tâches avec une boucle de messages Windows](/fr/build/core-features/common/async/async-task-queue-design-howto/task-queue-windows-msg-loop)
Fournit un exemple qui utilise le pool de threads pour le travail, mais intègre les rappels du port d'achèvement dans une procédure de fenêtre Win32. Cet exemple montre également comment arrêter correctement une file d'attente de tâches lorsque vous l'intégrez à un autre modèle de threading.

[Utilisation de la file d'attente de tâches du processus](/fr/build/core-features/common/async/async-task-queue-design-howto/using-process-task-queue)
Fournit un exemple qui montre comment utiliser la file d'attente de tâches du processus. La file d'attente de tâches du processus par défaut utilise le pool de threads pour la distribution du travail et des achèvements.

[Création d'une file d'attente de tâches composite](/fr/build/core-features/common/async/async-task-queue-design-howto/creating-composite-task-queue)
Fournit un exemple qui utilise le pool de threads pour le travail, mais intègre les rappels du port d'achèvement dans une fonction de rappel WindowProc Win32. Cet exemple montre également comment arrêter correctement une file d'attente de tâches lorsque vous l'intégrez à un autre modèle de threading.

[Utilisation de rappels différés](/fr/build/core-features/common/async/async-task-queue-design-howto/using-delayed-callbacks)
Fournit un exemple qui montre comment utiliser des rappels différés, en appelant 10 rappels une fois toutes les 500 ms. Utilisez une file d'attente de tâches pour soumettre des rappels dans le futur à l'aide de l'API `XTaskQueueSubmitDelayedCallback`. Vous pouvez ainsi réessayer un appel ayant échoué après un court délai, ou l'utiliser comme minuteur peu coûteux pour des événements périodiques.

[Utilisation d'un waiter de file d'attente de tâches](/fr/build/core-features/common/async/async-task-queue-design-howto/using-task-queue-waiter)
Fournit un exemple qui montre comment utiliser un waiter de file d'attente de tâches. Vous pouvez inscrire un handle de noyau Win32 auprès d'une file d'attente de tâches. Votre rappel sera soumis à la file d'attente lorsque le handle sera signalé.

## Documentation de référence de l'API

* [XTaskQueue (contenu de l'API)](/fr/reference/system/xtaskqueue/xtaskqueue_members)


## Related topics

- [Exemples GDK](/fr/home/setup-install/samples.md)
- [Exemples du GDK](/fr-CA/home/setup-install/samples.md)
- [Notes de version du SDK C++ PlayFab Multiplayer](/fr-CA/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-and-matchmaking-release-notes.md)
- [Notes de version de PlayFab Party](/fr-CA/services/playfab/multiplayer/networking/release-notes.md)
- [Étapes de test de validation des supports](/fr-CA/publishing/game-publishing/concepts/certification/certification-media-validation-test-steps.md)
