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

在控制台应用中使用 Realm - .NET SDK

在此页面上

  • Overview
  • 使用

Realm实例和对象绑定到 SynchronizationContext ,这意味着只能在创建它们的同一线程上访问它们。在具有用户界面线程的平台上,框架会在主线程上安装SynchronizationContext ,允许您通过异步调用读取和写入数据库。

但是,在控制台应用程序中,没有用户界面线程,因此没有安装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);
}
}

后退

基于分区的同步

在此页面上