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

# PFPlatformLocalStorageReadAsyncHandler

> Manipulador de armazenamento que o PlayFab chama para ler os dados armazenados em uma chave; ele inicia uma operação XAsync que é concluída com o número de bytes lidos.

Manipulador de leitura do armazenamento que o PlayFab chama quando precisa ler dados do armazenamento. Implemente-o como um [XAsyncProvider](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/functions/xasyncprovider.md).

## Sintaxe

```cpp theme={null}
HRESULT STDAPIVCALLTYPE PFPlatformLocalStorageReadAsyncHandler(
    void* context,
    const char* key,
    XAsyncBlock* async
);
```

### Parâmetros

**`context`**   `_In_opt_` void\*

O membro `context` da estrutura [PFLocalStorageHooks](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md) que você passou para [PFPlatformLocalStorageSetHandlers](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragesethandlers.md). Pode ser `nullptr`. O PlayFab não é proprietário desse ponteiro.

**`key`**   `_In_z_` const char\*

Identifica os dados. Normalmente, um caminho de arquivo. Leia os dados armazenados nessa chave.

**`async`**   `_Inout_` [XAsyncBlock](https://docs.xbox.com/pt-BR/reference/system/xasync/structs/xasyncblock.md)\*

O `XAsyncBlock` da operação de leitura.

### Valor de retorno

Tipo: HRESULT

Retorne `S_OK` se você tiver iniciado a operação assíncrona em `async`, por exemplo, com [XAsyncBegin](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/functions/xasyncbegin.md). Se o manipulador retornar um HRESULT de falha, o PlayFab fará a operação de armazenamento falhar com esse HRESULT e não aguardará a conclusão de `async`; portanto, retorne uma falha somente quando você não tiver iniciado uma operação em `async`. Informe o resultado da própria operação de armazenamento concluindo `async` com [XAsyncComplete](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/functions/xasynccomplete.md).

## Comentários

Para instalar esse manipulador, defina-o no membro `read` de uma estrutura [PFLocalStorageHooks](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md), junto com os outros dois manipuladores de armazenamento, e passe a estrutura para [PFPlatformLocalStorageSetHandlers](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragesethandlers.md) antes de chamar [PFInitialize](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfcore/functions/pfinitialize.md). PFPlatformLocalStorageSetHandlers retorna `E_INVALIDARG` se qualquer um dos três manipuladores for `nullptr`. Se você não definir manipuladores personalizados, o PlayFab usará uma implementação padrão baseada em cstdio e em objetos `std::fstream`.

Conclua `async` com [XAsyncComplete](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/functions/xasynccomplete.md), passando o resultado da leitura e o tamanho, em bytes, dos dados que você leu. Em seguida, o PlayFab chama `XAsyncGetResultSize` e `XAsyncGetResult` para copiar os dados; portanto, o seu provedor deve copiar os dados para o membro `buffer` de [XAsyncProviderData](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/structs/xasyncproviderdata.md) ao receber `XAsyncOp::GetResult`.

Se nenhum dado estiver armazenado em `key`, a implementação padrão concluirá a operação com `S_OK` e um tamanho de resultado igual a 0. Faça o mesmo no seu manipulador.

O PlayFab pode chamar esse manipulador de forma embutida no thread que inicia a operação de armazenamento, portanto, não dependa do thread em que ele é executado. A fila de `async` é uma fila que o PlayFab deriva do membro `queueHandle` de PFLocalStorageHooks. Se `queueHandle` for `nullptr`, o PlayFab a deriva da fila em segundo plano que você passou para PFInitialize ou da fila de tarefas do processo, se essa fila também for `nullptr`. Os retornos de chamada de trabalho e de conclusão da fila derivada são executados na porta de trabalho da fila da qual ela é derivada.

O PlayFab executa uma operação de armazenamento por vez e só inicia a próxima depois que a atual é concluída.

O PlayFab pode cancelar uma operação pendente chamando `XAsyncCancel` em `async`. Trate `XAsyncOp::Cancel` no seu provedor se a sua operação de armazenamento puder ser cancelada.

Os argumentos `key` e `async` pertencem ao PlayFab e permanecem válidos até que a operação seja concluída. O argumento `context` não é coberto por essa garantia.

## Requisitos

**Cabeçalho:** PFPlatform.h

**Biblioteca:** PlayFabCore.lib

**Plataformas compatíveis:** Windows, consoles da família XBOX One e consoles XBOX Series

## Confira também

[Membros de PFPlatform](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/pfplatform_members.md)

[PFLocalStorageHooks](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md)

[PFPlatformLocalStorageSetHandlers](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragesethandlers.md)

[XAsyncProvider](https://docs.xbox.com/pt-BR/reference/system/xasyncprovider/functions/xasyncprovider.md)

[PFPlatformLocalStorageWriteAsyncHandler](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragewriteasynchandler.md)

[PFPlatformLocalStorageClearAsyncHandler](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstorageclearasynchandler.md)


## Related topics

- [PFPlatformLocalStorageClearAsyncHandler](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstorageclearasynchandler.md)
- [PFPlatformLocalStorageWriteAsyncHandler](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragewriteasynchandler.md)
- [PFLocalStorageHooks](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/structs/pflocalstoragehooks.md)
- [Visão geral da API C de serviços - PFPlatform.h](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/pfplatform_members.md)
- [XblLocalStorageReadHandler](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/platform_c/functions/xbllocalstoragereadhandler.md)
