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

# Wrapper générique de tâche asynchrone

> Wrapper générique de tâche asynchrone

Cette rubrique fournit un exemple de wrapper générique de tâche asynchrone. Au lieu de configurer manuellement des blocs asynchrones et d'appeler [XAsyncRun](/fr/reference/system/xasync/functions/xasyncrun)
pour chaque tâche, créez un wrapper `RunTask` pour simplifier ce
processus. Grâce à ce wrapper, vous pouvez spécifier une file d'attente de tâches, un travail et un rappel d'achèvement facultatif.

```c++ theme={null}
void RunTask(XTaskQueueHandle taskQueue,
    std::function<void()> workCallback,
    std::function<void()> completionCallback)
{
    struct RunTaskContext
    {
        std::function<void()> workCallback;
        std::function<void()> completionCallback;
    };

    RunTaskContext* context = new RunTaskContext();
    context->workCallback = workCallback;
    context->completionCallback = completionCallback;
    XAsyncBlock* async = new XAsyncBlock{};
    async->queue = taskQueue;
    async->context = context;
    async->callback = [](XAsyncBlock* async)
    {
        RunTaskContext* context = static_cast<RunTaskContext*>(async->context);
        context->completionCallback();
        delete context;
        delete async;
    };

    // Callback passed to XAsyncRun is the work callback
    XAsyncRun(async,
        [](XAsyncBlock* async)->HRESULT
        {
            RunTaskContext* context = static_cast<RunTaskContext*>(async->context);
            context->workCallback();
            return S_OK;
        });
}
```

L'exemple précédent implémente une fonction qui prend un bloc asynchrone et deux
rappels : un rappel de travail et un rappel d'achèvement. Vous pouvez écrire une version qui
prend uniquement un rappel de travail, car le rappel d'achèvement est facultatif.

Elle utilise le modèle standard pour configurer un bloc asynchrone, configurer les données de
contexte et appeler [XAsyncRun](/fr/reference/system/xasync/functions/xasyncrun). `RunTask` encapsule le code
réutilisable et crée une fonction de tâche autonome simple. La capture de données simple est transmise aux rappels sans paramètres de contexte grâce à `std::function`.

```c++ theme={null}
RunTask(taskQueue,
    []()
    {
        // Work Callback
    },
    []()
    {
        // Completion Callback
    });
```

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

* [Xasync (contenu de l'API)](/fr/reference/system/xasync/xasync_members)
  * Fonctions
    * [XAsyncRun](/fr/reference/system/xasync/functions/xasyncrun)
* [Xtaskqueue (contenu de l'API)](/fr/reference/system/xtaskqueue/xtaskqueue_members)

## Voir aussi

[Vue d'ensemble de la programmation asynchrone](/fr/build/core-features/common/async/async-toc)
[XAsync](/fr/reference/system/xasync/xasync_members)
[XTaskQueue](/fr/reference/system/xtaskqueue/xtaskqueue_members)


## Related topics

- [PFLeaderboardsGetLeaderboardAsync](/fr-CA/services/playfab/api-references/c/pfleaderboards/functions/pfleaderboardsgetleaderboardasync.md)
- [PFStatisticsIncrementStatisticVersionAsync](/fr/services/playfab/api-references/c/pfstatistics/functions/pfstatisticsincrementstatisticversionasync.md)
- [PFLeaderboardsIncrementLeaderboardVersionAsync](/fr/services/playfab/api-references/c/pfleaderboards/functions/pfleaderboardsincrementleaderboardversionasync.md)
- [PFLeaderboardsGetLeaderboardForEntitiesAsync](/fr-CA/services/playfab/api-references/c/pfleaderboards/functions/pfleaderboardsgetleaderboardforentitiesasync.md)
- [PFLeaderboardsGetFriendLeaderboardForEntityAsync](/fr/services/playfab/api-references/c/pfleaderboards/functions/pfleaderboardsgetfriendleaderboardforentityasync.md)
