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

# 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\*](/pt-BR/reference/system/xasync/functions/xasynccompletionroutine)

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](/pt-BR/build/core-features/common/async/async-task-queue-design).

<Note>Depois de invocar uma chamada assíncrona, não modifique nenhum dos parâmetros no `XAsyncBlock` dessa chamada assíncrona.</Note>

### 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](/pt-BR/reference/system/xasync/functions/xasyncgetstatus) e, em seguida, usar [XAsyncGetResult](/pt-BR/reference/system/xasyncprovider/functions/xasyncgetresult) e [XAsyncGetResultSize](/pt-BR/reference/system/xasync/functions/xasyncgetresultsize) 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](/pt-BR/reference/system/xasync/functions/xasynccompletionroutine).

### Implementando XAsyncBlock

Você pode usar [XAsyncProvider](/pt-BR/reference/system/xasyncprovider/xasyncprovider_members) para implementar sua própria funcionalidade assíncrona usando `XAsyncBlock` e, em seguida, invocar essa funcionalidade usando funções de [XTaskQueue](/pt-BR/reference/system/xtaskqueue/xtaskqueue_members). Você também pode fazer chamadas assíncronas invocando [XAsyncRun](/pt-BR/reference/system/xasync/functions/xasyncrun), uma função auxiliar que usa internamente `XAsyncProvider` para executar e acompanhar a função de retorno de chamada especificada por [XAsyncWork](/pt-BR/reference/system/xasync/functions/xasyncwork), 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](/pt-BR/build/core-features/common/async/async-programming-model).

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](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task)
* [Visão geral da biblioteca XAsync](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync)
* [Visão geral da biblioteca XAsyncProvider](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasyncprovider)
* [Visão geral da biblioteca XTaskQueue](/pt-BR/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [Modelo de programação assíncrona](/pt-BR/build/core-features/common/async/async-programming-model)
* [Metas de design e melhorias da programação assíncrona](/pt-BR/build/core-features/common/async/async-whitepaper)
* [Enviando convites](/pt-BR/services/xbox-services/multiplayer/invites/how-to/live-invites-send)

## Confira também

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


## Related topics

- [XAsyncBlock](/reference/system/xasync/structs/xasyncblock.md)
- [Making Async Calls](/services/playfab/sdks/c/async.md)
- [PFGroupsBlockEntityAsync](/services/playfab/api-references/c/pfgroups/functions/pfgroupsblockentityasync.md)
