2016-06-29 4 views
1

ich eine gelegentliche Realms.RealmInvalidTransactionException Ausnahme auf Anrufe wie diese bekommen:Unterstützt Realm auf Xamarin gleichzeitige (nicht geschachtelte) Schreibtransaktionen?

var realm = Realm.GetInstance; 

using (var trans = realm.BeginWrite()) 
{ 
    var stopActualItem = realm.All<StopActualItemRealm>().Where(r => r.StopActualId == stopActualId).ToList().FirstOrDefault(); 

    if (stopActualItem == null) 
    { 
     stopActualItem = realm.CreateObject<StopActualItemRealm>(); 
    } 

    // Code that updates the stopActualItem class would be here 

    trans.Commit(); 
} 

Zur gleichen Zeit, Code in einem Hintergrund-Thread kann auch in einem anderen Beginwrite() Transaktion an die Realm-Datenbank zu schreiben werden. Die Ausnahme scheint ausgelöst zu werden, wenn versucht wird, gleichzeitige Schreibvorgänge auszuführen. Jeder Thread ruft Realm.GetInstance() auf. Sind gleichzeitige Realm-Schreib-Transaktionen erlaubt oder muss ich sie in die Warteschlange stellen?

Ich verwende Realm v0.76.1 mit Xamarin.Android

Antwort

1

Ja gleichzeitige Schreibanforderungen unterstützt werden und auf einem unserer internen Test Apps haben mit Dutzenden von Themen zu schreiben non-stop verprügelt worden.

Das Xamarin-Produkt verwendet dieselbe C++ - Kern-Engine, die von anderen Android-Benutzern aus Java getestet wurde.

Um weiter zu exolain, gibt es eine komplette aber die kurze Version ist MVCC mit (schnell) Blockierung auf der gesamten DB. Zu jedem gegebenen Zeitpunkt ist also nur ein Thread im Schreiben, während andere Schreibvorgänge synchronisiert und blockiert sind. Keine Lesevorgänge werden jemals durch Schreibvorgänge blockiert.

Es ist natürlich möglich, dass wir einen Bug haben und eine Demo-App schätzen würden, um zu sehen, ob wir replizieren können, zusammen mit weiteren Details zur Android-Umgebung, in der dies geschieht. Bitte log an issue mit zusätzlichen Details

Wenn Sie es privat halten müssen, senden Sie bitte eine E-Mail an [email protected]

Verwandte Themen