문서 메뉴
문서 홈
/ /
Atlas Device SDK
/

콘솔 앱에서 Realm 사용 - .NET SDK

이 페이지의 내용

  • 개요
  • 사용법

Realm 인스턴스와 객체는 SynchronizationContext 에 바인딩됩니다. 즉, 생성된 동일한 스레드에서만 액세스할 수 있습니다. UI 스레드가 있는 플랫폼에서 프레임워크는 메인 SynchronizationContext 스레드에 를 설치하여 비동기 호출을 통해 데이터베이스에 대한 읽기 및 쓰기 작업을 수행할 수 있도록 합니다.

그러나 콘솔 앱에는 UI 스레드가 없으므로 SynchronizationContext 이(가) 설치되지 않습니다. 즉, 비동기 작업을 await 하면 스레드 풀에서 임의의 스레드가 회전하여 이전에 열린 Realm 인스턴스에 더 이상 액세스할 수 없습니다.

비동기 호출 간에 Realm을 효율적으로 사용하려면 직접 구현하거나 타사 라이브러리에서 제공하는 SynchronizationContext 를 설치해야 합니다.

다음 코드 예제에서는 Realm SDK를 사용하여 콘솔 애플리케이션 에 Device Sync를 추가 합니다. 앱은 타사 Nito.AsyncEx 를 사용합니다. 패키지를 사용하여 을 AsyncContext 제공합니다. 그런 다음 Realm 코드는 AsyncContext 아래에서 실행됩니다.

using System;
using System.Linq;
using System.Threading.Tasks;
using Nito.AsyncEx;
using Realms;
using Realms.Sync;
namespace ConsoleTests
{
class Program
{
const string myRealmAppId = "myAppId";
public static void Main(string[] args)
{
Nito.AsyncEx.AsyncContext.Run(async () => await MainAsync(args));
}
private static async Task MainAsync(string[] args)
{
var app = App.Create(myRealmAppId);
var user = await app.LogInAsync(Credentials.Anonymous());
var config = new PartitionSyncConfiguration("partition", user);
using var realm = await Realm.GetInstanceAsync();
var itemsBiggerThanFive = realm.All<Item>().Where(f => f.Size > 5);
foreach (var item in itemsBiggerThanFive)
{
await Task.Delay(10); // Simulates some background work
Console.WriteLine(item.Size);
}
}

돌아가기

파티션 기반 동기화

다음

로깅

이 페이지의 내용