Docs Menu
Docs Home
/ /
Sincronizar datos

Comprobar el progreso de carga y descarga - .NET SDK

Quizás quieras conocer el estado de las operaciones de sincronización en tu aplicación. Por ejemplo, podrías querer que un código específico se ejecute solo después de que todos los datos se sincronicen con App Services. También podrías querer proporcionar a los usuarios el estado de las operaciones de sincronización.

Puedes configurar tu sesión de sincronización para que espere a que se carguen o descarguen los cambios. También puedes configurarla para que te notifique cuando cambie el estado de la conexión.

Para esperar de forma asincrónica a que se completen los cambios, obtenga la sesión de sincronización desde el Propiedad Realms.Sync.SyncSession y luego llamar a los métodos session.WaitForUploadAsync() o session.WaitForDownloadAsync(). Por ejemplo:

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

..versión cambiada:: 12.0.0

Nota

Las notificaciones de progreso de la sincronización flexible aún no son totalmente compatibles. Al usar la sincronización flexible, las descargas solo notifican las notificaciones después de integrar los cambios. La sincronización basada en particiones proporciona notificaciones continuas a medida que se descargan los cambios. Las cargas informan del progreso en ambos modos de sincronización.

Para supervisar el progreso de la sincronización, obtenga la sesión de sincronización de la propiedad Realms.Sync.SyncSession y luego agregue una notificación de progreso llamando al método session.GetProgressObservable().

El session.GetProgressObservable El método toma los dos parámetros siguientes:

  • Un parámetro ProgressDirection que se puede establecer Upload en Download o.

  • Un parámetro ProgressMode que se puede establecer en ReportIndefinitely para que las notificaciones continúen hasta que se cancele el registro de la ForCurrentlyOutstandingWork devolución de llamada, o para que las notificaciones continúen hasta que solo se sincronicen los bytes transferibles actualmente.

Cuando te suscribesAdemásde las notificaciones, recibe un objeto SyncProgress que proporciona una estimación del porcentaje de datos restantes a transferir como un valor entre 0 y..10

Ejemplo

En el siguiente ejemplo, nos suscribimos a un observable de progreso en session para escuchar eventos de carga. Cuando se activa esta devolución de llamada, se imprime el progreso de carga como porcentaje.

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

Una vez que ya no desee recibir notificaciones, cancele el registro del token utilizando token.Dispose().

Para obtener el estado de conexión de una SyncSession, configure un controlador de eventos en el evento PropertyChanged. Este controlador es un delegado PropertyChangedEventHandler estándar de .NET que acepta un sender objeto y un objeto PropertyChangedEventArgs. En el controlador de eventos, convierta el remitente a un Session objeto y compruebe si la PropertyName propiedad del argumento del evento es.Session.ConnectionState A continuación, puede obtener el valor ConnectionState, que será uno de los siguientes:

  • Conectando

  • Conexo

  • Desconectado

El siguiente código demuestra cómo configurar el controlador de eventos, convertir el objeto de sesión y verificar el estado de sincronización:

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
}
}
}

Volver

Suspender o reanudar una sesión de sincronización

En esta página