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

# Ejemplo de configuración de la capacidad de cancelación

> Ejemplo de configuración de la capacidad de cancelación

En este tema se proporciona un ejemplo de cómo configurar la capacidad de cancelación en una devolución de llamada de proveedor personalizado. Los métodos asincrónicos básicos que se inician con [XAsyncRun](/reference/system/xasync/functions/xasyncrun) no se pueden
cancelar. La compatibilidad con la cancelación se puede agregar manualmente cuando se usa un
proveedor personalizado. Una vez agregada la compatibilidad, [XAsyncCancel](/reference/system/xasync/functions/xasynccancel)
desencadena el caso `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.
    }
}
```

En estos casos del proveedor, la compatibilidad con la cancelación se agrega mediante un
evento de Windows. Este se establece si se llama al caso `Cancel`, y el
caso `DoWork` termina con una llamada a [XAsyncComplete](/reference/system/xasyncprovider/functions/xasynccomplete) con
el estado `E_ABORT`. Se puede usar cualquier método para señalar la cancelación. Sin embargo,
un evento es una forma sencilla de señalar la cancelación que se admite en cualquier plataforma del Microsoft Game Development Kit (GDK) a la que se pueda destinar.

Para desencadenar el caso `Cancel`, llame a `XAsyncCancel`
con el bloque asincrónico de la tarea, como se muestra a continuación.

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

## Documentación de referencia de la API

* [XAsyncProvider (contenido de la API)](/reference/system/xasyncprovider/xasyncprovider_members)
  * Funciones
    * [XAsyncComplete](/reference/system/xasyncprovider/functions/xasynccomplete)
* [xasync (contenido de la API)](/reference/system/xasync/xasync_members)
  * Funciones
    * [XAsyncRun](/reference/system/xasync/functions/xasyncrun)
    * [XAsyncCancel](/reference/system/xasync/functions/xasynccancel)

## Consulte también

[Información general de la biblioteca XAsyncProvider](/build/core-features/common/async/async-libraries/async-library-xasyncprovider)

[Configuración de un proveedor personalizado (ejemplo)](/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-custom-provider)

[Configuración de los métodos de invocación (ejemplo)](/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-invocation-methods)

[Configuración de los datos devueltos (ejemplo)](/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-return-data)

[XAsyncProvider](/reference/system/xasyncprovider/xasyncprovider_members)


## Related topics

- [Bibliotecas XAsync para la programación de tareas asincrónicas](/es/build/core-features/common/async/async-libraries/index.md)
- [Ejemplo de configuración de los métodos de invocación](/es/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-invocation-methods.md)
- [Ejemplo de configuración de los datos devueltos](/es/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-return-data.md)
- [XAG 117: Distracciones visuales y configuración de movimiento](/es/build/game-principles/accessibility/xag-deep-dives/xag-117-visual-distractions-motion.md)
- [XAG 114: Contexto de la interfaz de usuario](/es/build/game-principles/accessibility/xag-deep-dives/xag-114-ui-context.md)
