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

# XGameSaveInitializeProviderAsync

> XGameSaveInitializeProviderAsync

# XGameSaveInitializeProviderAsync

Fournit et initialise de façon asynchrone un handle de fournisseur XGameSave.

## Syntaxe

```cpp theme={null}
HRESULT XGameSaveInitializeProviderAsync(  
         XUserHandle requestingUser,  
         const char* configurationId,  
         bool syncOnDemand,  
         XAsyncBlock* async  
)  
```

### Paramètres

*requestingUser*   \_In\_\
Type : XUserHandle

Handle vers un utilisateur XBOX Live.

*configurationId*   \_In\_z\_\
Type : char\*

ID de configuration de service (SCID).

*syncOnDemand*   \_In\_\
Type : bool

Si la valeur est true, syncOnDemand télécharge des données du service uniquement si nécessaire. Ne fonctionne pas si l'appareil est hors ligne.
La valeur true peut entraîner l'affichage d'une interface utilisateur de progression de la synchronisation.

*async*   \_In\_\
Type : [XAsyncBlock\*](/fr-CA/reference/system/xasync/structs/xasyncblock)

Contient les informations de l'appel asynchrone. Cela comprend le contexte d'appel et un appel à la fonction
[XGameSaveInitializeProviderResult](/fr-CA/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult).

### Valeur de retour

Type : HRESULT

Résultat de la fonction.

## Remarques

Cette fonction doit être appelée avec succès avant d'utiliser les autres API XGameSave.

<Note>L'API XGameSave exige que l'ID de titre et l'ID de configuration de service (SCID) de votre titre soient</Note>
correctement configurés pour fonctionner. Pour plus d'informations sur ces ID requis, consultez [Configuration des bacs à sable pour le développement XBOX
Live](/fr-CA/services/xbox-services/fundamentals/sandboxes/live-setting-up-sandboxes). Votre jeu doit être activé pour XBOX Live dans Partner Center.

Si vous ne configurez pas correctement votre SCID et votre ID de titre, vos appels à l'API XSaveGame échoueront avec le code d'erreur suivant :

E\_GS\_NO\_ACCESS - 0x80830002 - L'opération a échoué, car le titre n'a pas accès aux espaces de stockage des conteneurs.

Le **XGameSaveProviderHandle** résultant est obtenu à partir de la fonction
[XGameSaveInitializeProviderResult](/fr-CA/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult). C'est le handle que vous utiliserez pour
accéder à votre **XGameSaveProvider**.

Lorsque cette API est appelée avec *syncOnDemand* défini à true, elle se comporte de la même façon du point de vue de l'appelant, mais elle entraîne
certaines différences de comportement dans le reste de l'API. Le **XGameSaveProvider** *SyncOnDemand* télécharge des données du
service uniquement si nécessaire, mais cela comporte aussi l'inconvénient que toute opération sur un conteneur peut alors être retardée,
et ce délai peut entraîner l'affichage d'une interface utilisateur de progression de la synchronisation. L'utilisation de l'une des méthodes suivantes peut
forcer une synchronisation :

* [XGameSaveCreateUpdate](/fr-CA/reference/system/xgamesave/functions/xgamesavecreateupdate)
* [XGameSaveEnumeratorBlobInfo](/fr-CA/reference/system/xgamesave/functions/xgamesaveenumerateblobinfo)
* [XGameSaveEnumerateBlobInfoByName](/fr-CA/reference/system/xgamesave/functions/xgamesaveenumerateblobinfobyname)
* [XGameSaveEnumerateContainerInfo](/fr-CA/reference/system/xgamesave/functions/xgamesaveenumeratecontainerinfo)
* [XGameSaveEnumerateContainerInfoByName](/fr-CA/reference/system/xgamesave/functions/xgamesaveenumeratecontainerinfobyname)

Un autre inconvénient est que, si l'appareil est hors ligne ou a des problèmes de connectivité, l'accès au conteneur est
impossible.

\##Exemple

```cpp theme={null}
// ASYNC Init - can be kicked off from a time sensitive thread 
//              work and callback will happen from platform provided threads 
void Sample::_InitializeAsync() 
{ 
    HRESULT hr; 
  
    struct InitContext 
    { 
        Sample* self; 
        XAsyncBlock async; 
    }; 
  
    InitContext* ctx = new InitContext{}; 
    if (ctx) 
    { 
        ctx->self = this; 
        ctx->async.context = ctx; 
        ctx->async.callback = [](XAsyncBlock* async) 
        { 
            auto ctx = reinterpret_cast<InitContext*>(async->context); 
            auto self = ctx->self; 
            XGameSaveProviderHandle provider = nullptr; 
            HRESULT hr = XGameSaveInitializeProviderResult(async, &provider); 
            if (SUCCEEDED(hr)) 
            { 
                self->_provider = provider; 
            } 
            else 
            { 
                self->_HandleInitializeErrors(self->_xalUser, hr); 
            } 
            delete ctx; 
        }; 
    } 
    else 
    { 
        hr = E_OUTOFMEMORY; 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveInitializeProviderAsync(this->_xalUser, "SERVICE_CONFIG_ID-DEADBEEF0123", false, &ctx->async); 
    } 
    if (FAILED(hr)) 
    { 
        // if we didn't setup the async we need to cleanup our tracking context 
        delete ctx; 
        _HandleInitializeErrors(this->_xalUser, hr); 
    } 
} 
```

Les jeux ne peuvent pas combiner l'utilisation de XGameSaveFiles et celle de XGameSave. Les jeux doivent choisir le système de sauvegarde infonuagique
qu'ils veulent utiliser. Si le jeu utilise XGameSaveFiles et appelle ensuite XGameSaveInitializeProvider, une erreur
E\_GS\_PROVIDER\_MISMATCH se produit. De même, si le jeu utilisait XGameSave et appelle ensuite XGameSaveFilesGetFolderWithUiAsync,
une erreur E\_GS\_PROVIDER\_MISMATCH se produit également.

## Configuration requise

**En-tête :** XGameSave.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Objectifs de conception et améliorations de la programmation asynchrone](/fr-CA/build/core-features/common/async/async-whitepaper)
* [Outils des sauvegardes de jeu](/fr-CA/build/core-features/common/game-save/game-saves-tools)

## Voir aussi

[XGameSave](/fr-CA/reference/system/xgamesave/xgamesave_members)\
[XGameSaveInitializeProviderResult](/fr-CA/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult)\
[XGameSaveInitializeProvider](/fr-CA/reference/system/xgamesave/functions/xgamesaveinitializeprovider)\
[Débogage des sauvegardes de jeu](/fr-CA/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync.md)
- [XGameSaveInitializeProviderResult](/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult.md)
- [XGameSaveInitializeProvider](/reference/system/xgamesave/functions/xgamesaveinitializeprovider.md)
