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

# PFPlatformLocalStorageWriteAsyncHandler

> Manipulador de armazenamento que o PlayFab chama para gravar um buffer de dados em uma chave; ele inicia uma operação XAsync que é concluída sem carga de resultado.

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

## Sintaxe

```cpp theme={null}
HRESULT STDAPIVCALLTYPE PFPlatformLocalStorageWriteAsyncHandler(
    void* context,
    const char* key,
    size_t dataSize,
    void const* data,
    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. Grave os dados nessa chave.

**`dataSize`**   `_In_` size\_t

O tamanho, em bytes, de `data`.

**`data`**   `_In_reads_bytes_(dataSize)` void const\*

Os dados a serem gravados.

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

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

### 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 `write` 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 gravação e um tamanho de resultado igual a 0.

A implementação padrão acrescenta `data` aos dados existentes de `key`; ela não os substitui. O PlayFab depende desse comportamento: quando a saída de rastreamento para um arquivo está habilitada com [PFTraceEnableTraceToFile](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pftrace/functions/pftraceenabletracetofile.md), o PlayFab limpa o arquivo de rastreamento uma vez e, em seguida, grava cada mensagem de rastreamento como uma gravação separada na mesma chave. Acrescente os dados também no seu manipulador; caso contrário, o arquivo de rastreamento manterá apenas a última mensagem.

`data` permanece válido até que a operação seja concluída. Copie-o se precisar dele depois disso.

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)

[PFPlatformLocalStorageReadAsyncHandler](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragereadasynchandler.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)
- [PFPlatformLocalStorageReadAsyncHandler](https://docs.xbox.com/pt-BR/services/playfab/api-references/c/pfplatform/functions/pfplatformlocalstoragereadasynchandler.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)
- [XblLocalStorageWriteHandler](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/platform_c/functions/xbllocalstoragewritehandler.md)
