> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Exemple de configuration de la possibilité d'annulation

> Ajoutez la prise en charge de l'annulation à un fournisseur asynchrone personnalisé en signalant un événement dans le cas Cancel et en terminant DoWork avec E_ABORT, puis déclenchez-la avec XAsyncCancel.

Cette rubrique fournit un exemple de configuration de la possibilité d'annulation dans un rappel de fournisseur personnalisé. Les méthodes asynchrones de base démarrées avec [XAsyncRun](https://docs.xbox.com/fr-CA/reference/system/xasync/functions/xasyncrun.md) ne peuvent pas être
annulées. La prise en charge de l'annulation peut être ajoutée manuellement lorsque vous utilisez un
fournisseur personnalisé. Une fois la prise en charge ajoutée, [XAsyncCancel](https://docs.xbox.com/fr-CA/reference/system/xasync/functions/xasynccancel.md)
déclenche le cas `Cancel`.

```c++ theme={null}
// Provider callback.
[](XAsyncOp op, const XAsyncProviderData* providerData)
{
    switch(op)
    {
        case XAsyncOp::DoWork:
        {
            bool canceled = false;
            while (true)
            {
                DWORD waitResult = WaitForSingleObject(callData->cancelEvent, 0);
                if (waitResult != WAIT_TIMEOUT)
                {
                    canceled = true;
                    break;
                }

                // Continue doing normal work. Should break if completed.
            }

            if (canceled)
            {
                XAsyncComplete(providerData->async, E_ABORT, 0);
            }
            else
            {
                XAsyncComplete(providerData->async, S_OK, 0);
            }

            break;
        }
        
        case XAsyncOp::Cancel:
            SetEvent(callData->cancelEvent);
            break;

        // Other cases.
    }
}
```

Dans ces cas du fournisseur, la prise en charge de l'annulation est ajoutée à l'aide d'un
événement Windows. Celui-ci est signalé si le cas `Cancel` est appelé, et le
cas `DoWork` se termine par un appel à [XAsyncComplete](https://docs.xbox.com/fr-CA/reference/system/xasyncprovider/functions/xasynccomplete.md) avec
l'état `E_ABORT`. N'importe quelle méthode peut être utilisée pour signaler l'annulation. Toutefois,
un événement est un moyen simple de signaler l'annulation, pris en charge sur toutes les plateformes du Microsoft Game Development Kit (GDK) pouvant être ciblées.

Pour déclencher le cas `Cancel`, appelez `XAsyncCancel`
avec le bloc asynchrone de la tâche, comme suit.

```c++ theme={null}
XAsyncCancel(async);
```

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

* [XAsyncProvider (contenu de l'API)](https://docs.xbox.com/fr-CA/reference/system/xasyncprovider/xasyncprovider_members.md)
  * Fonctions
    * [XAsyncComplete](https://docs.xbox.com/fr-CA/reference/system/xasyncprovider/functions/xasynccomplete.md)
* [xasync (contenu de l'API)](https://docs.xbox.com/fr-CA/reference/system/xasync/xasync_members.md)
  * Fonctions
    * [XAsyncRun](https://docs.xbox.com/fr-CA/reference/system/xasync/functions/xasyncrun.md)
    * [XAsyncCancel](https://docs.xbox.com/fr-CA/reference/system/xasync/functions/xasynccancel.md)

## Voir aussi

[Vue d'ensemble de la bibliothèque XAsyncProvider](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider.md)

[Configurer un fournisseur personnalisé (exemple)](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-custom-provider.md)

[Configurer des méthodes d'appel (exemple)](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-invocation-methods.md)

[Configurer des données de retour (exemple)](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-return-data.md)

[XAsyncProvider](https://docs.xbox.com/fr-CA/reference/system/xasyncprovider/xasyncprovider_members.md)


## Related topics

- [Bibliothèques XAsync pour la programmation de tâches asynchrones](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/index.md)
- [Exemple de configuration de données de retour](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-return-data.md)
- [Exemple de configuration de méthodes d'appel](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-invocation-methods.md)
- [Exemple de configuration d'un fournisseur personnalisé](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-custom-provider.md)
- [Vue d'ensemble de la bibliothèque XAsyncProvider](https://docs.xbox.com/fr-CA/build/core-features/common/async/async-libraries/async-library-xasyncprovider.md)
