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

# XGameSaveSubmitUpdateAsync

> XGameSaveSubmitUpdateAsync

# XGameSaveSubmitUpdateAsync

Envia uma atualização para o serviço **XGameSave** de forma assíncrona. Atualiza blobs dentro de um contêiner.

## Sintaxe

```cpp theme={null}
HRESULT XGameSaveSubmitUpdateAsync(  
         XGameSaveUpdateHandle updateContext,  
         XAsyncBlock* async  
)  
```

### Parâmetros

*updateContext*   \_In\_\
Tipo: XGameSaveUpdateHandle

Um identificador para o XGameSaveUpdate a ser atualizado.

*async*   \_In\_\
Tipo: [XAsyncBlock\*](/pt-BR/reference/system/xasync/structs/xasyncblock)

Um AsyncBlock que contém o contexto de chamada e a função de retorno de chamada para a chamada de **XGameSaveSubmitUpdateAsync**.

### Valor retornado

Tipo: HRESULT

Resultado da função

## Comentários

Esta função é chamada como parte da função de chamada do AsyncBlock de [XGameSaveSubmitUpdateAsync](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateasync). Esta função será usada para determinar os resultados de [XGameSaveSubmitUpdateAsync](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateasync).

A parte de armazenamento desta API foi projetada para transferir dados facilmente do jogo para o armazenamento persistente de maneira segura, confiável e transacional. Queremos garantir que os dados de suporte de um contêiner estejam sempre consistentes e, por isso, queremos que toda a operação seja bem-sucedida ou falhe atomicamente. Não queremos uma atualização parcial em que alguns dados de blob fiquem inconsistentes com outros dados dentro do contêiner. Para isso, fornecemos um contexto de atualização ao qual as gravações e exclusões de blobs são enviadas e, quando ele estiver pronto, todo o contexto é enviado. Na prática, isso funciona da seguinte forma:

Um XGameSaveUpdate será preenchido com ações de gravação e exclusão a serem executadas em blobs dentro do contêiner por meio de [XGameSaveSubmitBlobWrite](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobwrite) e [XGameSaveSubmitBlobDelete](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobdelete). Uma atualização é concluída chamando [XGameSaveSubmitUpdateAsync](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitupdateasync).

Quando terminar de usar um **XGameSaveUpdate**, feche-o usando o método [XGameSaveCloseUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavecloseupdate).

O exemplo de C++ a seguir demonstra uma atualização assíncrona do XGameSave.

```cpp theme={null}
// ASYNC Write - can be kicked off from a time sensitive thread 
//               actual work and completion will be scheduled base upon 
//               the configuration of the async_queue tied to the XAsyncBlock. 
void Sample::_SaveDataAsync(const char* containerName, const char* containerDisplayName) 
{ 
    struct SaveContext 
    { 
        SaveContext(Sample* s) : self(s), containerContext(nullptr), updateContext(nullptr) {} 
        ~SaveContext() 
        { 
            if (updateContext) 
            { 
                XGameSaveCloseUpdate(updateContext); 
            } 
            if (containerContext) 
            { 
                XGameSaveCloseContainer(containerContext); 
            } 
        } 
  
        XAsyncBlock async; 
        XGameSaveContainerHandle containerContext; 
        XGameSaveUpdateHandle updateContext; 
        Sample* self; 
    }; 
  
    HRESULT hr; 
    SaveContext* saveContext = new SaveContext(this); 
    if (saveContext == nullptr) 
    { 
        hr = E_OUTOFMEMORY; 
    } 
    if (SUCCEEDED(hr)) 
    { 
        saveContext->async.context = saveContext; 
        saveContext->async.callback = [](XAsyncBlock* async) 
        { 
            auto ctx = reinterpret_cast<SaveContext*>(async->context); 
            auto self = ctx->self; 
            HRESULT hr = XGameSaveSubmitUpdateResult(async); 
            self->_HandleContainerUpdateErrors(hr); 
            delete ctx; 
        }; 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveCreateContainer(_provider, containerName, &saveContext->containerContext); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveCreateUpdate(saveContext->containerContext, containerDisplayName, &saveContext->updateContext); 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(saveContext->updateContext, "WorldState", _worldState.data(), _worldState.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(saveContext->updateContext, "PlayerState", _playerState.data(), _playerState.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(saveContext->updateContext, "PlayerInventory", _playerInventory.data(), _playerInventory.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        if (_clearLevelProgress) 
        { 
            hr = XGameSaveSubmitBlobDelete(saveContext->updateContext, "LevelProgress"); 
        } 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitUpdateAsync(saveContext->updateContext, &saveContext->async); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        // context is now owned by the async 
        saveContext = nullptr; 
    } 
  
    // if there was any error we need to cleanup the saveContext 
    if (saveContext) 
    { 
        delete saveContext; 
    } 
  
} 
```

## Requisitos

**Cabeçalho:** XGameSave.h

**Biblioteca:** xgameruntime.lib

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

## Documentação conceitual

* [Metas de design e aprimoramentos da programação assíncrona](/pt-BR/build/core-features/common/async/async-whitepaper)

## Confira também

[XGameSave](/pt-BR/reference/system/xgamesave/xgamesave_members)\
[XGameSaveCreateUpdate](/pt-BR/reference/system/xgamesave/functions/xgamesavecreateupdate)\
[XGameSaveSubmitBlobWrite](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobwrite)\
[XGameSaveSubmitBlobDelete](/pt-BR/reference/system/xgamesave/functions/xgamesavesubmitblobdelete)\
[Depuração de salvamentos de jogos](/pt-BR/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveSubmitUpdateAsync](/ko/reference/system/xgamesave/functions/xgamesavesubmitupdateasync.md)
- [XGameSaveSubmitUpdateResult](/reference/system/xgamesave/functions/xgamesavesubmitupdateresult.md)
