Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/

Usar o Realm em um aplicativo de console - .NET SDK

Nesta página

  • Visão geral
  • Uso

As instâncias e objetos de Realm estão vinculados a um SynchronizationContext, o que significa que eles só podem ser acessados no mesmo thread em que são criados. Em plataformas com uma thread de UI, a framework instala um SynchronizationContext na thread principal, permitindo fazer leituras e escritas no banco de banco de dados com chamadas assíncronas.

No entanto, em aplicativos de console, não há nenhum thread da UI e, portanto, nenhum SynchronizationContext instalado. Isso significa que, se você await uma Tarefa assíncrona, um thread aleatório será gerado a partir do pool de threads, do qual você não poderá mais acessar nenhuma instância de Realm aberta anteriormente.

Para poder usar o Realm com eficiência entre chamadas assíncronas, você deve instalar um SynchronizationContext - um que você implementa ou um fornecido em uma biblioteca de terceiros.

O exemplo de código a seguir usa o Realm SDK para adicionar o Device Sync a um aplicativo de console. O aplicativo usa o Nito.AsyncEx de terceiros pacote para fornecer um AsyncContext. O código Realm é então executado sob o 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);
}
}

Voltar

Sincronização baseada em partição

Nesta página