我偶尔得到一个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。