Xamarin上的Realm是否支持并发(非嵌套)写事务?



我偶尔得到一个Realms。RealmInvalidTransactionException异常调用如下:

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();
}

同时,后台线程中的代码也可以在另一个BeginWrite()事务中写入Realm数据库。当尝试进行并发写操作时,似乎会抛出异常。每个线程都调用Realm.GetInstance()。允许并发Realm写事务吗?还是我需要将它们排队?

我正在使用带有Xamarin的Realm v0.76.1。Android

是的,并发写请求是支持的,在我们的一个内部测试应用程序上,几十个线程不停地写。

Xamarin产品使用相同的c++核心引擎,其他Android用户从Java进行了大量测试。

为了进一步解释,在Realm中有一个完整的深入研究线程,但简短的版本是我们在整个DB上有(快速)阻塞的MVCC。因此,在任何给定的时刻,只有一个线程在写操作,而其他写操作是同步的和阻塞的。任何读操作都不会被写操作阻塞。

这当然是可能的,我们有一个错误,并将真正感激演示应用程序,看看我们是否可以复制,以及更多的细节,在Android环境中发生这种情况。请记录带有额外详细信息的问题

如果您需要保密,请发邮件至help@realm.io。

最新更新