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

# XAsyncBlock

> XAsyncBlock

# XAsyncBlock

Representa o tempo de vida de uma chamada assíncrona.

## Sintaxe

```cpp theme={null}
typedef struct XAsyncBlock {  
    XTaskQueueHandle queue;  
    void* context;  
    XAsyncCompletionRoutine* callback;  
    unsigned internal[sizeof ( void* ) * 4];  
} XAsyncBlock  
```

### Membros

*queue*\
Tipo: XTaskQueueHandle

Opcional. O identificador da fila de tarefas para a chamada assíncrona e, opcionalmente, para o retorno de chamada de conclusão especificado em *callback*. Se definido como nulo, a chamada assíncrona tentará usar a fila de tarefas do processo. Se a fila de tarefas do processo também estiver definida como nula, a chamada assíncrona falhará e retornará `E_NO_TASK_QUEUE`.

*context*\
Tipo: void\*

Opcional. Um ponteiro para informações passadas ao retorno de chamada de conclusão.

*callback*\
Tipo: [XAsyncCompletionRoutine\*](https://docs.xbox.com/pt-BR/reference/system/xasync/functions/xasynccompletionroutine.md)

Retorno de chamada opcional que será invocado quando a chamada for concluída.

*internal*\
Tipo: unsigned char\[sizeof(void\*) \* 4]

Reservado para uso interno.

## Comentários

A estrutura `XAsyncBlock` representa o tempo de vida de uma chamada assíncrona. Você usa `XAsyncBlock` primeiro para invocar uma chamada assíncrona e fornecer um retorno de chamada de conclusão opcional para essa chamada. Depois disso, você pode usar o `XAsyncBlock` como um identificador para a invocação dessa chamada específica. Quando você invoca uma chamada assíncrona, ela é enviada a uma fila de tarefas para execução. Uma fila de tarefas permite determinar qual thread executa a chamada assíncrona e qual thread invoca o retorno de chamada de conclusão, se houver um especificado. Não é necessário criar uma fila de tarefas para fazer chamadas assíncronas. Se uma fila de tarefas não for especificada em *queue*, a fila de tarefas do processo será usada por padrão. Normalmente, a fila de tarefas do processo despacha chamadas assíncronas para o pool de threads do sistema, e os retornos de chamada de conclusão são invocados no thread que iniciou a chamada assíncrona quando esse thread está em estado de alerta. Para obter mais informações sobre os modos de despacho das filas de tarefas, consulte [Design da fila de tarefas assíncronas](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-task-queue-design.md).

> [!NOTE]
>
> Depois de invocar uma chamada assíncrona, não modifique nenhum dos parâmetros no `XAsyncBlock` dessa chamada assíncrona.

### Retornos de chamada de conclusão

Opcionalmente, você pode especificar um ponteiro para uma função de retorno de chamada em *callback* para fornecer um *retorno de chamada de conclusão* para uma chamada assíncrona. Um retorno de chamada de conclusão é uma função de retorno de chamada executada após a conclusão de uma chamada assíncrona. Você pode fornecer dados específicos do contexto ao retorno de chamada de conclusão especificando em *context* um ponteiro que represente as informações para o retorno de chamada de conclusão.

Se você não especificar um retorno de chamada de conclusão em *callback*, poderá verificar periodicamente se a chamada assíncrona foi concluída usando a função [XAsyncGetStatus](https://docs.xbox.com/pt-BR/reference/system/xasync/functions/xasyncgetstatus.md) e, em seguida, usar [XAsyncGetResult](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/functions/xasyncgetresult.md) e [XAsyncGetResultSize](https://docs.xbox.com/pt-BR/reference/system/xasync/functions/xasyncgetresultsize.md) conforme necessário para obter os resultados da tarefa concluída.

Para obter mais informações sobre retornos de chamada de conclusão, consulte [XAsyncCompletionRoutine](https://docs.xbox.com/pt-BR/reference/system/xasync/functions/xasynccompletionroutine.md).

### Implementando XAsyncBlock

Você pode usar [XAsyncProvider](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/xasyncprovider_members.md) para implementar sua própria funcionalidade assíncrona usando `XAsyncBlock` e, em seguida, invocar essa funcionalidade usando funções de [XTaskQueue](https://docs.xbox.com/pt-BR/reference/system/xtaskqueue/xtaskqueue_members.md). Você também pode fazer chamadas assíncronas invocando [XAsyncRun](https://docs.xbox.com/pt-BR/reference/system/xasync/functions/xasyncrun.md), uma função auxiliar que usa internamente `XAsyncProvider` para executar e acompanhar a função de retorno de chamada especificada por [XAsyncWork](https://docs.xbox.com/pt-BR/reference/system/xasync/functions/xasyncwork.md), outra função auxiliar. Para obter mais informações sobre como implementar sua própria funcionalidade assíncrona usando `XAsyncProvider` e `XAsyncBlock`, consulte [Modelo de programação assíncrona](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-programming-model.md).

Um `XAsyncBlock` deve permanecer na memória durante todo o tempo de vida de uma chamada assíncrona. No entanto, se o `XAsyncBlock` for alocado dinamicamente, ele poderá ser excluído com segurança dentro do retorno de chamada de conclusão de uma chamada assíncrona.

## Requisitos

**Cabeçalho:** XAsync.h

**Plataformas com suporte:** Windows, consoles da família XBOX One e consoles XBOX Series

## Documentação conceitual

* [Configurar tarefa assíncrona](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task.md)
* [Visão geral da biblioteca XAsync](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync.md)
* [Visão geral da biblioteca XAsyncProvider](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-libraries/async-library-xasyncprovider.md)
* [Visão geral da biblioteca XTaskQueue](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-libraries/async-library-xtaskqueue.md)
* [Modelo de programação assíncrona](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-programming-model.md)
* [Metas de design e melhorias da programação assíncrona](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-whitepaper.md)
* [Enviando convites](https://docs.xbox.com/pt-BR/services/xbox-services/multiplayer/invites/how-to/live-invites-send.md)

## Confira também

[Membros de XAsync](https://docs.xbox.com/pt-BR/reference/system/xasync/xasync_members.md)\
[Membros de XAsyncProvider](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/xasyncprovider_members.md)\
[Modelo de programação assíncrona](https://docs.xbox.com/pt-BR/build/core-features/common/async/async-programming-model.md)


## Related topics

- [Fazendo chamadas assíncronas na API C da XSAPI](https://docs.xbox.com/pt-BR/services/xbox-services/fundamentals/xbox-services-api/live-flatc-async-patterns.md)
- [Fazendo chamadas assíncronas no SDK unificado do PlayFab](https://docs.xbox.com/pt-BR/services/playfab/sdks/unified-sdk/async-model.md)
- [Fazendo chamadas assíncronas](https://docs.xbox.com/pt-BR/services/playfab/sdks/c/async.md)
- [PFGroupsBlockEntityAsync](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfgroups/functions/pfgroupsblockentityasync.md)
- [PFGroupsListGroupBlocksAsync](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfgroups/functions/pfgroupslistgroupblocksasync.md)
