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

# Metas de design e melhorias da programação assíncrona

> Metas de design e melhorias da programação assíncrona

Este tópico aborda as metas de design definidas ao criar o novo modelo de programação assíncrona do Microsoft Game Development Kit (GDK). Este tópico também aborda as melhorias feitas em relação ao modelo do XBOX One Software Development Kit, em resposta aos comentários dos desenvolvedores.

## Neste tópico

* [Introdução](#introduction)
* [Metas de design](#design_goals)
  * [Consistente e multiplataforma](#consistent_cross_platform)
  * [Controle total do desenvolvedor](#complete_developer_control)
  * [Qualquer situação de threading](#any_threading_situation)
* [Melhorias em relação ao XBOX One Software Development Kit](#improvements_from_xdk)
  * [Sem C++/CLI](#no_more_ccli_winrt)
  * [Controle total do comportamento de threading](#complete_control_of_threading_behavior)
  * [Códigos de erro em vez de exceções](#error_codes_instead_of_exceptions)
  * [Sem coleta de lixo](#no_garbage_collection)
  * [Alto desempenho garantido](#guaranteed_high_performance)
    * [Threads sensíveis ao tempo](#time_sensitive_threads)
  * [Uso genérico além das chamadas de API do Microsoft Game Development Kit (GDK)](#generic_usage_beyond_gdk_api_calls)

<a id="introduction" />

## Introdução

O Microsoft Game Development Kit (GDK) introduziu um novo modelo de programação
assíncrona projetado para fornecer a você um comportamento de execução altamente
personalizável e controlável, com baixa sobrecarga de
processamento e memória. Todas as chamadas de API assíncronas no Microsoft Game Development Kit (GDK) usam
esse modelo para oferecer consistência. No entanto, as bibliotecas assíncronas
podem ser usadas diretamente nos seus próprios sistemas de tarefas e assíncronos para gerenciar
o enfileiramento e o despacho de tarefas.

Aprendendo com o modelo assíncrono anterior do XBOX One Software Development Kit e com os
comentários dos desenvolvedores, a nova solução no Microsoft Game Development Kit (GDK) oferece
a você controle total de como e onde as tarefas assíncronas são executadas.
Você pode usar qualquer design de threading, seja com execuções síncronas em
um único thread ou execuções paralelas em threads do título com prioridades e máscaras de afinidade
altamente específicas. O XBOX One Software Development Kit usava apenas o
pool de threads do sistema.

A mudança de paradigma do Microsoft Game Development Kit (GDK) aprimora o que era a solução do XBOX One Software Development Kit usando APIs em C simples (flat-C) no estilo Win32 ou APIs C++ simples. Com isso, você pode gerenciar diretamente
o momento da alocação e da desalocação de memória. O desempenho pode ser
inspecionado com mais facilidade, e a maioria das chamadas de API (e todas as chamadas de API da biblioteca
assíncrona usadas para execução de tarefas) vem com uma [garantia de alto
desempenho](#guaranteed_high_performance).

<a id="design_goals" />

## Metas de design

As bibliotecas assíncronas foram projetadas com algumas metas principais para garantir
que os títulos obtenham o máximo de desempenho com o mínimo de sobrecarga da
API ou do sistema. A lista a seguir contém algumas metas de alto nível.

* O código assíncrono é consistente e fácil de entender e identificar.
* Você tem liberdade para gerenciar completamente o comportamento de execução dos retornos de chamada.
* Você pode usar threads como quiser.
* O desempenho e o uso de memória são consistentes e fáceis de gerenciar.
* A sobrecarga do sistema para executar tarefas é baixa e utilizável em threads principais.
* As bibliotecas assíncronas não devem ser reservadas apenas para o uso de APIs do Microsoft Game Development Kit (GDK).

Algumas dessas metas são abordadas nas subseções a seguir e outras
são abordadas na seção [Melhorias em relação ao XBOX One Software Development Kit](#improvements_from_xdk)
deste tópico.

<a id="consistent_cross_platform" />

### Consistente e multiplataforma

A consistência oferece algumas das expectativas a seguir sobre como as APIs assíncronas são escritas
e se comportam.

* Métodos e dados são prefixados com `X`, seguido do nome da biblioteca.
* [Erros normais são relatados por meio de códigos de erro HRESULT](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/overviews/error-handling).
* Todas as chamadas assíncronas em todo o Microsoft Game Development Kit (GDK) usam um [XAsyncBlock](/pt-BR/reference/system/xasync/structs/xasyncblock).
* Os métodos de início assíncronos do Microsoft Game Development Kit (GDK) têm o sufixo `Async`.
* Os métodos de resultado assíncronos do Microsoft Game Development Kit (GDK) têm o sufixo `Result`.

Ser multiplataforma significa que as mesmas chamadas de API assíncronas podem ser
usadas em qualquer plataforma à qual o Microsoft Game Development Kit (GDK) se destina. Atualmente, essas plataformas
incluem [PC com Windows (tópico sob NDA)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction#shipping-a-game-on-Windows-PCs), [consoles da família XBOX One e consoles XBOX Series (tópico sob NDA)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction#Shipping-a-game-on-Xbox-consoles).

Seja usando as bibliotecas assíncronas para chamadas de API do Microsoft Game Development Kit (GDK) ou para sua própria
funcionalidade, o processo é sempre o mesmo para [configurar um
XAsyncBlock](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task) e [iniciar o
método assíncrono](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-run-simple-task). Sempre que um método
assíncrono é fornecido por uma biblioteca, esses métodos usam as bibliotecas
assíncronas para implementação. A tabela a seguir mostra algumas bibliotecas
que expõem métodos assíncronos.

| Biblioteca | Uso assíncrono | Métodos de exemplo |
| - | - | - |
| [XUser](/pt-BR/reference/system/xuser/xuser_members) | Gerenciar usuários dos XBOX services | [XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync),<br />[XUserAddResult](/pt-BR/reference/system/xuser/functions/xuseraddresult),<br />[XUserGetGamerPictureAsync](/pt-BR/reference/system/xuser/functions/xusergetgamerpictureasync),<br />[XUserGetGamerPictureResult](/pt-BR/reference/system/xuser/functions/xusergetgamerpictureresult) |
| [XGameSave](/pt-BR/reference/system/xgamesave/xgamesave_members) | Ler, gravar e gerenciar jogos salvos | [XGameSaveInitializeProviderAsync](/pt-BR/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync),<br />[XGameSaveInitializeProviderResult](/pt-BR/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult),<br />[XGameSaveSubmitUpdateAsync](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateasync),<br />[XGameSaveSubmitUpdateResult](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateresult) |
| [XPackage](/pt-BR/reference/system/xpackage/xpackage_members) | Observar e gerenciar instalações de jogos | [XPackageInstallChunksAsync](/pt-BR/reference/system/xpackage/functions/xpackageinstallchunksasync),<br />[XPackageInstallChunksResult](/pt-BR/reference/system/xpackage/functions/xpackageinstallchunksresult) |
| [XGameUI](/pt-BR/reference/system/xgameui/xgameui_members) | Usar caixas de diálogo do sistema e outras interfaces do shell | [XGameUiShowMessageDialogAsync](/pt-BR/reference/system/xgameui/functions/xgameuishowmessagedialogasync),<br />[XGameUiShowMessageDialogResult](/pt-BR/reference/system/xgameui/functions/xgameuishowmessagedialogresult),<br />[XGameUiShowSendGameInviteAsync](/pt-BR/reference/system/xgameui/functions/xgameuishowsendgameinviteasync),<br />[XGameUiShowSendGameInviteResult](/pt-BR/reference/system/xgameui/functions/xgameuishowsendgameinviteresult) |

<a id="complete_developer_control" />

### Controle total do desenvolvedor

Uma parte importante das novas bibliotecas assíncronas é que você
tem controle total para permitir o melhor uso possível
para o título. Isso significa que muitas partes do modelo são
personalizáveis, incluindo as seguintes.

* Os retornos de chamada nas filas de tarefas podem ser despachados automática ou manualmente.
* Os retornos de chamada de conclusão são opcionais, e a sondagem (polling) pode ser usada.
* As filas de tarefas padrão do processo podem ser [alteradas ou removidas](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue).
* [Provedores assíncronos personalizados](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-custom-provider) podem ser implementados para alterar o [fluxo de gerenciamento de tarefas](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasyncprovider).

Ao [criar](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuecreate) uma fila de tarefas, você pode [personalizar](/pt-BR/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode) como os retornos de chamada das duas portas são despachados, conforme mostrado na tabela a seguir.

| Modo da porta | Comportamento |
| - | - |
| `ThreadPool` | Os retornos de chamada enfileirados são despachados automática e simultaneamente em segundo plano em threads do pool do sistema. |
| `SerializedThreadPool` | Os retornos de chamada enfileirados são despachados automaticamente em segundo plano em threads do pool do sistema. No entanto, apenas um retorno de chamada pode estar ativo por vez, garantindo a execução serial sem sobreposição. |
| `Immediate` | Os retornos de chamada são executados imediatamente no quadro de pilha do chamador ao tentar enfileirar, em vez de enfileirar os retornos de chamada para mais tarde. Se a porta de trabalho for `Immediate`, o retorno de chamada de trabalho será executado ao iniciar a chamada assíncrona. Se a porta de conclusão for `Immediate`, o retorno de chamada de conclusão será executado após o término do retorno de chamada de trabalho, no mesmo quadro de pilha. |
| `Manual` | Nenhum retorno de chamada enfileirado em uma porta nesse modo é despachado automaticamente. Você precisa chamar [XTaskQueueDispatch](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuedispatch) para executar manualmente os retornos de chamada na porta. O padrão de chamada determina o quanto os retornos de chamada serão multithread e simultâneos. |

Você pode substituir a fila de tarefas padrão usada pelo título quando nenhuma fila
de tarefas é especificada usando [XTaskQueueSetCurrentProcessTaskQueue](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue).
Se quiser garantir que uma fila de tarefas seja sempre especificada,
você também pode usar essa função com `nullptr` para remover a fila padrão.
Ao fazer isso, um erro será gerado se uma fila de tarefas não for
especificada.

Se preferir usar sondagem nas chamadas assíncronas para saber quando a
tarefa é concluída, você pode usar [XAsyncGetStatus](/pt-BR/reference/system/xasync/functions/xasyncgetstatus) para verificar os códigos
de retorno.

<a id="any_threading_situation" />

### Qualquer situação de threading

Quando uma porta de fila de tarefas é configurada para usar o despacho manual, não há
restrição sobre quando ou como a porta é despachada. As bibliotecas
assíncronas são thread-safe em sua implementação, para que comportamentos personalizados de
threading e simultaneidade possam ocorrer sem bloqueios.
Seções críticas, operações interligadas e outras construções relacionadas a
multithreading só são necessárias para proteger os dados do usuário
usados nos retornos de chamada, e não os sistemas assíncronos.

Ao usar seus próprios threads, você tem liberdade para definir máscaras de afinidade e
prioridades de thread conforme a necessidade da sua implementação. Você também
pode usar o loop de mensagens do Windows para lidar com o despacho.
O comportamento de execução dos retornos de chamada de tarefas nas portas manuais depende
completamente de como seus threads estão configurados para chamar
[XTaskQueueDispatch](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuedispatch), conforme mostrado nas figuras 1 e 2.

**Figura 1. Mostra o comportamento de execução dos retornos de chamada de um thread**

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/async_port_dispatch_singlethread.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=bceacfdac6d7a8a6bd58641ac4c604c0" alt="Captura de tela do comportamento de execução dos retornos de chamada de um thread" width="588" height="230" data-path="images/gdk/features/common/async_port_dispatch_singlethread.png" />

**Figura 2. Mostra o comportamento de execução dos retornos de chamada de vários threads**

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/async_port_dispatch_multithread.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=697aae48e97cb3aa23845108060a1882" alt="Captura de tela do comportamento de execução dos retornos de chamada de vários threads" width="628" height="230" data-path="images/gdk/features/common/async_port_dispatch_multithread.png" />

<a id="improvements_from_xdk" />

## Melhorias em relação ao XBOX One Software Development Kit

[Responder aos seus comentários e aprimorar soluções anteriores é muito
importante para o Microsoft Game Development Kit (GDK) (tópico sob NDA)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction). As subseções
a seguir listam algumas melhorias importantes feitas em comparação com a
programação assíncrona no XBOX One Software Development Kit.

<a id="no_more_ccli_winrt" />

### Sem C++/CLI (WinRT)

O XBOX One Software Development Kit exigia o uso de C++/CLI (WinRT) para o comportamento de funções
assíncronas. Com isso, o sistema gerenciava suas chamadas para os XBOX services e
outros serviços sem enfrentar problemas como vazamentos de recursos e erros. No entanto, isso também exigia
aprender uma nova sintaxe de codificação e levar em conta a divisão de tempo implícita
e o uso de recursos do sistema.

O [modelo assíncrono do Microsoft Game Development Kit (GDK)](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/intro/introduction#microsoft-game-development-kit-gdk-async-model) muda o paradigma para um modelo de API em estilo C no estilo Win32 para as bibliotecas assíncronas. O código do Microsoft Game Development Kit (GDK) pode ser
usado diretamente em projetos C/C++ sem integrar o ecossistema
WinRT gerenciado. Como resultado, todas as alocações e comportamentos ficam isolados
e são bem compreendidos, com o mínimo de comportamento em segundo plano nos threads do sistema.

<a id="complete_control_of_threading_behavior" />

### Controle total do comportamento de threading

O XBOX One Software Development Kit tinha uma única forma de lidar com chamadas assíncronas, que era
executá-las simultaneamente em threads do pool do sistema. O nível de controle se
limitava a ajustar o pool de threads do sistema.

No Microsoft Game Development Kit (GDK), o threading pode usar o pool de threads do sistema, como descrito para o XBOX One Software Development Kit, ou
ser personalizado com threading manual para criar o comportamento para
o aplicativo. Com o threading manual, o comportamento de execução dos retornos de chamada
é determinado por como e quando [XTaskQueueDispatch](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuedispatch) é
chamado. Se essa função for chamada em apenas um thread, o comportamento
se tornará síncrono, executando nesse thread. Se vários threads chamarem a
função simultaneamente, cada chamada obterá um retorno de chamada diferente da
fila de tarefas e os executará em paralelo.

Os diferentes comportamentos de execução dos retornos de chamada foram explicados na seção [Controle total do desenvolvedor](#complete_developer_control) deste tópico.

<a id="error_codes_instead_of_exceptions" />

### Códigos de erro em vez de exceções

O Microsoft Game Development Kit (GDK) abrange muitas tecnologias, antigas e novas. Como resultado,
o tratamento de erros pode variar de biblioteca para biblioteca. As bibliotecas
assíncronas foram projetadas para serem "sem exceções". Isso significa que
exceções não são usadas para erros de chamada, controle de fluxo, relatório de status
ou qualquer outra finalidade em tempo de execução. Você pode usar seu próprio
tratamento de exceções no seu título.

A maioria dos erros e códigos de status agora é relatada por meio de códigos `HRESULT` no
estilo de codificação padrão do Win32. Quando o código de status do resultado não é
importante, um booliano pode ser usado. Quando se espera que um método de API
gere erros comuns, esses erros são listados na documentação
com uma explicação de suas causas.

Como são usados códigos `HRESULT`, um padrão simples para verificar os códigos é
usar as macros `SUCCESS()` e `FAILED()` do Windows. Ao verificar
códigos de erro específicos para determinar como prosseguir, você pode verificar o valor `HRESULT`.

Para obter mais informações sobre o tratamento de erros no Microsoft Game Development Kit (GDK), consulte [Tratamento de erros no Microsoft Game Development Kit](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/overviews/error-handling).

<a id="no_garbage_collection" />

### Sem coleta de lixo

Como não há suporte a C++/CLI (WinRT) no Microsoft Game Development Kit (GDK), isso também significa
que não há coleta de lixo ocorrendo em segundo plano durante o
tempo de execução. Todas as alocações do sistema operacional rastreadas são representadas por objetos `HANDLE`
diretos ou por [typedefs](https://learn.microsoft.com/cpp/c-language/typedef-declarations?view=msvc-160) de identificadores personalizados fornecidos pelas bibliotecas.

Usando identificadores, você pode configurar o momento, o comportamento e o desempenho de alocação/desalocação para serem gerenciados pelo chamador. Essas alocações e
desalocações podem ser transferidas para threads de carregamento de suporte
para evitar travamentos de desempenho. A desalocação não acontece
inesperadamente quando o desempenho é fundamental.

No entanto, o rastreamento de recursos e a prevenção de vazamentos de memória
passam a ser sua responsabilidade. Garanta que qualquer identificador
alocado seja desalocado quando não for mais necessário.

<a id="guaranteed_high_performance" />

### Alto desempenho garantido

O modelo assíncrono do XBOX One Software Development Kit, com o uso do framework COM gerenciado,
estava sujeito a oscilações inesperadas de memória e desempenho que
às vezes eram difíceis de prever. No entanto, o modelo do Microsoft Game Development Kit (GDK) garante
desempenho e consumo de memória consistentes.

Como o threading pode ser controlado, o desempenho das chamadas do sistema
pode ser inspecionado com mais facilidade usando um criador de perfil ou código personalizado. O exemplo
Asynchronous Programming do ATG tem testes internos para medir parte do tempo gasto. O gráfico da figura 3 mede o tempo gasto gerenciando uma
tarefa assíncrona com um provedor assíncrono personalizado. Os threads personalizados usados
no teste executam os retornos de chamada o mais rápido possível.

**Figura 3. Mostra o gráfico que mede a sobrecarga do sistema assíncrono**

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/async_system_overhead.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=f3b502ebab1ac4271107b2bbc70c390c" alt="Captura de tela do gráfico que mede a sobrecarga do sistema assíncrono" width="975" height="527" data-path="images/gdk/features/common/async_system_overhead.png" />

A sobrecarga do sistema é muito baixa. Os custos de sobrecarga ocorrem principalmente
durante a espera para que os threads despachem as portas da fila de tarefas. O tempo
geral da tarefa assíncrona, desconsiderando os custos de sobrecarga, é o trabalho real dentro
dos retornos de chamada da tarefa.

<a id="time_sensitive_threads" />

#### Threads sensíveis ao tempo

[Threads sensíveis ao tempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads) são uma nova especificação que o
Microsoft Game Development Kit (GDK) usa para identificar threads do título que não devem ter operações de bloqueio nem
operações inesperadamente longas. Um usuário pode marcar um
thread do título como sensível ao tempo com uma chamada para
[XThreadSetTimeSensitive](/pt-BR/reference/system/xthread/functions/xthreadsettimesensitive). Quando um thread é marcado como
sensível ao tempo, qualquer invocação de método de API do Microsoft Game Development Kit (GDK) nesse thread que
não forneça um desempenho de tempo de execução consistente e confiável (definido como não
"seguro para sensibilidade ao tempo") dispara uma asserção de depuração para você.

Esses métodos seguros para sensibilidade ao tempo incluem as seguintes garantias no
lado da implementação.

* Nenhum carregamento ou inicialização sob demanda é realizado.
* Nenhuma chamada é feita entre limites de VM ou de processo.
* As alocações de memória são limitadas.

Com isso, os métodos seguros para sensibilidade ao tempo são executados em tempo
consistente com as mesmas entradas e não causam picos inesperados de desempenho.
Muitos métodos do Microsoft Game Development Kit (GDK) são marcados internamente como seguros para sensibilidade ao tempo, e
os threads não precisam ser marcados como sensíveis ao tempo para obter a garantia
ao chamar métodos seguros para sensibilidade ao tempo.

A maioria dos métodos de API assíncronos é segura para sensibilidade ao tempo. Os que
não são estão relacionados à configuração da fila de tarefas e a outras chamadas de baixa frequência
que normalmente são invocadas no momento do carregamento ou da inicialização. Todos os métodos relacionados a
iniciar, gerenciar, cancelar, concluir ou trabalhar diretamente de outra forma
com tarefas assíncronas são seguros para sensibilidade ao tempo. Para obter mais informações sobre funções não seguras, consulte a seção [Funções não seguras para threads sensíveis ao tempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads#unsafe-function-list) do tópico Threads sensíveis ao tempo.

<a id="generic_usage_beyond_gdk_api_calls" />

### Uso genérico além das chamadas de API do Microsoft Game Development Kit (GDK)

As bibliotecas assíncronas do Microsoft Game Development Kit (GDK) são genéricas e não se limitam ao uso
em chamadas de API. Qualquer chamada assíncrona fornecida pelo Microsoft Game Development Kit (GDK) usa as
bibliotecas assíncronas internamente e fornece [métodos consistentes](#consistent_cross_platform)
para ações que incluem iniciar a tarefa e obter os resultados. Para obter mais informações sobre
como usar as bibliotecas para finalidades que não envolvem APIs do GDK, consulte [Código de exemplo](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-run-simple-task).

Com essa configuração, [iniciar uma tarefa assíncrona](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-run-simple-task)
é o mesmo processo, seja uma função do Microsoft Game Development Kit (GDK) ou um padrão
personalizado: um [XAsyncBlock é configurado](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task) para
uma tarefa e, em seguida, a tarefa é iniciada. Iniciar a tarefa pode ser uma função de API do Microsoft Game Development Kit (GDK)
ou um método personalizado do título.

Fique à vontade para usar as bibliotecas assíncronas para qualquer
finalidade assíncrona em todo o seu título.

## Documentação de referência da API

* [XAsync (conteúdo da API)](/pt-BR/reference/system/xasync/xasync_members)
  * Funções
    * [XAsyncGetStatus](/pt-BR/reference/system/xasync/functions/xasyncgetstatus)
  * Estruturas
    * [XAsyncBlock](/pt-BR/reference/system/xasync/structs/xasyncblock)
* [XAsyncProvider (conteúdo da API)](/pt-BR/reference/system/xasyncprovider/xasyncprovider_members)
* [XTaskQueue (conteúdo da API)](/pt-BR/reference/system/xtaskqueue/xtaskqueue_members)
  * Funções
    * [xtaskqueuesetcurrentprocesstaskqueue](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue)
    * [xtaskqueuecreate](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuecreate)
    * [XTaskQueueDispatch](/pt-BR/reference/system/xtaskqueue/functions/xtaskqueuedispatch)
* [xuser (conteúdo da API)](/pt-BR/reference/system/xuser/xuser_members)
  * Funções
    * [XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync)
    * [XUserAddResult](/pt-BR/reference/system/xuser/functions/xuseraddresult)
    * [XUserGetGamerPictureAsync](/pt-BR/reference/system/xuser/functions/xusergetgamerpictureasync)
    * [XUserGetGamerPictureResult](/pt-BR/reference/system/xuser/functions/xusergetgamerpictureresult)
* [xgamesave (conteúdo da API)](/pt-BR/reference/system/xgamesave/xgamesave_members)
  * Funções
    * [XGameSaveInitializeProviderAsync](/pt-BR/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)
    * [XGameSaveInitializeProviderResult](/pt-BR/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult)
    * [XGameSaveSubmitUpdateAsync](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateasync)
    * [XGameSaveSubmitUpdateResult](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateresult)
* [xpackage (conteúdo da API)](/pt-BR/reference/system/xpackage/xpackage_members)
  * Funções
    * [XPackageInstallChunksAsync](/pt-BR/reference/system/xpackage/functions/xpackageinstallchunksasync)
    * [XPackageInstallChunksResult](/pt-BR/reference/system/xpackage/functions/xpackageinstallchunksresult)
* [xgameui (conteúdo da API)](/pt-BR/reference/system/xgameui/xgameui_members)
  * Funções
    * [XGameUiShowMessageDialogAsync](/pt-BR/reference/system/xgameui/functions/xgameuishowmessagedialogasync)
    * [XGameUiShowMessageDialogResult](/pt-BR/reference/system/xgameui/functions/xgameuishowmessagedialogresult)
    * [XGameUiShowSendGameInviteAsync](/pt-BR/reference/system/xgameui/functions/xgameuishowsendgameinviteasync)
    * [XGameUiShowSendGameInviteResult](/pt-BR/reference/system/xgameui/functions/xgameuishowsendgameinviteresult)
* [xthread (conteúdo da API)](/pt-BR/reference/system/xthread/xthread_members)
  * Funções
    * [XThreadSetTimeSensitive](/pt-BR/reference/system/xthread/functions/xthreadsettimesensitive)

## Consulte também

[Modelo de programação assíncrona](/pt-BR/build/core-features/common/async/async-programming-model)
[Projetando a fila de tarefas](/pt-BR/build/core-features/common/async/async-task-queue-design)


## Related topics

- [Guia de programação do Direct3D 12](/pt-BR/build/gdk-and-engines/guides/directx-12-programming-guide.md)
- [Referência da API C dos Serviços PlayFab](/pt-BR/services/playfab/api-references/c/index.md)
- [Notas de versão do PlayFab Party](/pt-BR/services/playfab/multiplayer/networking/release-notes.md)
- [XBOX Rapid Updates](/pt-BR/publishing/game-publishing/concepts/certification/xbox-rapid-updates.md)
- [Visão geral de acessibilidade no GDK](/pt-BR/build/game-principles/accessibility/accessibility-overview.md)
