Verificar o progresso de upload e download - .NET SDK
Nesta página
Monitore o progresso e o status da sincronizaçã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.
Aguarde o upload ou download das alterações
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();
Monitorar o progresso da sincronização
..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
ouDownload
.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, ouForCurrentlyOutstandingWork
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()
.
Obter alterações de estado de conexão
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 } } }