Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Verificar o progresso de upload e download - .NET SDK

Nesta página

  • Monitore o progresso e o status da sincronização
  • Aguarde o upload ou download das alterações
  • Monitorar o progresso da sincronização
  • Obter alterações de estado de conexão

Talvez você queira saber o status das operações de sincronização em seu aplicativo. Por exemplo, você pode querer que um código específico seja executado somente depois que todos os dados estiverem sincronizados com o App Services. Talvez você também queira fornecer aos usuários o status das operações de sincronização.

Você pode configurar sua sessão de sincronização para aguardar o upload ou download das alterações. Você também pode configurar sua sessão de sincronização para notificar quando o status da conexão de sincronização for alterado.

Para aguardar de forma assíncrona que suas alterações sejam concluídas, obtenha a sessão de sincronização da propriedadeRealms.Sync.SyncSession e, em seguida, chame o método session.WaitForUploadAsync() ou session.WaitForDownloadAsync() . Por exemplo:

using Realms.Sync;
var realm = Realm.GetInstance(config);
await realm.SyncSession.WaitForDownloadAsync();

..versionchanged:: 12.0.0

Observação

As notificações de progresso da Flexible Sync ainda não são totalmente suportadas. Ao usar a Flexible Sync, os downloads só relatam notificações após a integração das alterações. A sincronização baseada em partição fornece notificações contínuas à medida que o download das alterações progride. Os carregamentos relatam notificações de progresso contínuo para ambos os modos de sincronização.

Para monitorar o progresso da sincronização, obtenha a sessão de sincronização na propriedade Realms.Sync.SyncSession e adicione uma notificação de progresso ligando para o método session.GetProgressObservable() .

O método session.GetProgressObservable usa os dois parâmetros a seguir:

  • Um parâmetro ProgressDirection que pode ser configurado para Upload ou Download.

  • Um parâmetro ProgressMode que pode ser definido como ReportIndefinitely para que as notificações continuem até que o registro da chamada de resposta de resposta seja cancelado, ou ForCurrentlyOutstandingWork para que as notificações continuem até que somente os bytes atualmente transferíveis sejam sincronizados.

Quando você se inscreve nas notificações, você recebe um objeto SyncProgress que fornece uma estimativa da porcentagem de dados restantes a serem transferidos como um valor entre 0 e 1.0.

Exemplo

No exemplo a seguir, assinamos um progresso observável em session para ouvir eventos de upload. Quando esse chamada de resposta de chamada é acionado, ele imprime o progresso do upload como uma porcentagem.

var session = realm.SyncSession;
var token = session.GetProgressObservable(ProgressDirection.Upload,
ProgressMode.ReportIndefinitely)
.Subscribe(progress =>
{
Console.WriteLine($@"Current upload progress:
{progress.ProgressEstimate * 100}%");
});
token.Dispose();

Quando você não desejar mais receber notificações, cancele o registro do token usando token.Dispose().

Para obter o estado da conexão de uma SyncSession, defina um manipulador de evento no evento PropertyChanged . O manipulador de evento é um delegado padrão do PropertyChangedEventHandler do .NET que recebe um sender objeto e PropertyChangedEventArgs objeto. No manipulador de evento , converta o destinatário em um objeto Session e verifique se a propriedade PropertyName do argumento do evento é Session.ConnectionState. Em seguida, você pode obter o valor ConnectionState , que será um dos seguintes:

  • Conectando

  • Conectado

  • desconectado

O código a seguir demonstra como definir o manipulador de eventos, converter o objeto de sessão e verificar o status da sincronização:

public void SetupRealm()
{
var appConfig = new AppConfiguration(myRealmAppId);
app = App.Create(appConfig);
user = app.LogInAsync(Credentials.Anonymous()).Result;
config = new PartitionSyncConfiguration("myPartition", user);
try
{
var realm = Realm.GetInstance(config);
var session = realm.SyncSession;
session.PropertyChanged += SyncSessionPropertyChanged!;
realm.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void SyncSessionPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(Session.ConnectionState))
{
var session = (Session)sender;
var currentState = session.ConnectionState;
if (currentState == ConnectionState.Connecting)
{
//session is connecting
}
if (currentState == ConnectionState.Connected)
{
//session is connected
}
if (currentState == ConnectionState.Disconnected)
{
//session has been disconnected
}
}
}

Voltar

Suspender ou retomar uma sessão de sincronização