Docs Menu
Docs Home
/ /
Atlas Device SDK
/

コンソール アプリで Realm を使用する - .NET SDK

項目一覧

  • Overview
  • 使用法

Realmの インスタンスとオブジェクトは SyncronizationContext にバインドされています つまり、 が作成されているのと同じスレッドでのみアクセスできます。 UIスレッドがあるプラットフォームでは、フレームワークによってメインSynchronizationContext スレッドに がインストールされ、非同期呼び出しでデータベースへの読み取りと書込みを行うことができます。

ただし、コンソール アプリでは UI スレッドがないため、 SynchronizationContextはインストールされません。 つまり非同期タスクをawaitすると、スレッド プールからランダムなスレッドが起動し、以前に開いた Realm インスタンスにはアクセスできなくなります。

非同期呼び出し間で Realm を効率的に使用するには、 SynchronizationContextをインストールする必要があります。これは自分で実装するもの、またはサードパーティのライブラリが提供するものです。

次のコード例では、Realm SDK を使用してDevice Sync をコンソール アプリケーションに追加します。 このアプリでは、サードパーティの nito.AsyncEx を使用します。 パッケージを使用して、 を提供します。AsyncContextRealm コードは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);
}
}

戻る

パーティションベースの同期

項目一覧