Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

检查上传和下载进度 - .NET SDK

在此页面上

  • 监控同步进度和状态
  • 等待上传或下载更改
  • 监控同步进度
  • 获取连接状态更改

您可能想知道应用程序中同步操作的状态。 例如,您可能希望仅在所有数据与 App Services 同步后才运行特定代码。 您可能还想为用户提供同步操作的状态。

您可以将 Sync 会话设置为等待上传或下载更改。 您还可以将同步会话配置为在 Sync 连接状态发生变化时发出通知。

要异步等待更改完成,请从 Realms.Sync.SyncSession属性获取同步会话,然后调用session.WaitForUploadAsync()session.WaitForDownloadAsync()方法。 示例:

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

..versionchanged:: 12.0.0

注意

尚不完全支持 Flexible Sync 进度通知。 使用Flexible Sync时,仅在集成更改后下载报告通知。 基于分区的同步在下载变更时提供持续通知。 上传报告两种同步模式的持续进度通知。

要监控同步进度,请从Realms.Sync.SyncSession属性获取同步会话,然后通过调用session.GetProgressObservable()方法添加进度通知。

session.GetProgressObservable方法接受以下两个参数:

  • 可设立为UploadDownloadProgressDirection参数。

  • ProgressMode参数,可设立为ReportIndefinitely ,以便通知继续,直到取消注册回调;或者设置为ForCurrentlyOutstandingWork ,让通知继续,直到仅同步当前可传输的字节。

当您 订阅 对于通知,您会收到一个 SyncProgress 对象,该对象以介于0 和1 0之间的值形式提供要传输的剩余数据百分比的估计值。 。

例子

在以下示例中,我们订阅session上的进度可观察量以侦听上传事件。 当触发此回调时,它会以百分比形式打印上传进度。

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

一旦您不再希望接收通知,请使用token.Dispose()取消注册令牌。

要获取SyncSession的连接状态,请对PropertyChanged事件设立事件处理程序。 事件处理程序是标准.NET PropertyChangedEventHandler 委托 接受sender 对象和 PropertyChangedEventArgs 对象。在事件处理程序中,将发送者转换为Session对象,并检查事件参数的PropertyName属性是否为Session.ConnectionState 。 然后,您可以获得ConnectionState值,该值将是以下值之一:

  • 正在连接

  • 可连接

  • 断开连接

以下代码演示了如何设置事件处理程序、转换会话对象以及检查同步状态:

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

后退

挂起或恢复同步会话