업로드 및 다운로드 진행 상황 확인 - .NET SDK
동기화 진행 상황 및 상태 모니터링
앱의 동기화 작업 상태를 알고 싶을 수 있습니다. 예를 들어 모든 데이터가 App Services와 동기화된 후에만 특정 코드가 실행되도록 할 수 있습니다. 사용자에게 동기화 작업 상태를 제공할 수도 있습니다.
변경 사항이 업로드되거나 다운로드될 때까지 기다리도록 동기화 세션을 설정할 수 있습니다. 동기화 연결 상태가 변경될 때 알리도록 동기화 세션을 구성할 수도 있습니다.
변경 사항이 업로드되거나 다운로드될 때까지 기다립니다.
변경 사항이 완료될 때까지 비동기적으로 기다리려면 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
메서드는 다음 두 매개변수를 사용합니다.
Upload
또는Download
로 설정하다 수 있는 ProgressDirection 매개 변수입니다.콜백 이 등록 취소될 때까지 알림 이 계속되도록 하려면
ReportIndefinitely
로, 현재 전송 가능한 바이트만 동기화될 때까지 알림 을 계속하려면ForCurrentlyOutstandingWork
로 설정하다 수 있는 ProgressMode 매개 변수입니다.
을(를) 구독 하는 경우 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 } } }