C# xamarin中的处理域

C# xamarin中的处理域,c#,xamarin,realm,realm-mobile-platform,C#,Xamarin,Realm,Realm Mobile Platform,我正在使用Xamarin.Forms中的Realm构建移动应用程序,对关闭Xamarin中的Realm有一些疑问 以下是更新域中记录的方法 public void updateData(EventType e) { Realm realm = Realm.GetInstance(); realm.WriteAsync(tempRealm => {

我正在使用
Xamarin.Forms
中的
Realm
构建移动应用程序,对关闭Xamarin中的Realm有一些疑问

以下是更新域中记录的方法

public  void updateData(EventType e)
        {

               Realm realm = Realm.GetInstance();
                 realm.WriteAsync(tempRealm =>
                {

                    tempRealm.Add(e.response, true);
                });

                realm.Dispose();

                MessagingCenter.Send<IMessage, EventType>(this, RestApi.UI_EVENT, e);


        }
public void updateData(事件类型e)
{
Realm Realm=Realm.GetInstance();
realm.WriteAsync(tempRealm=>
{
tempRealm.Add(e.response,true);
});
realm.Dispose();
发送(此,RestApi.UI_事件,e);
}
  • 每次调用
    realm.GetInstance()时,是否需要调用realm.Dispose()
  • WriteAsync是否负责关闭/处理域
  • 我是否必须使用
    await
    againts
    realm.WriteAsync
    作为异步方法 我们是否需要每次调用realm.GetInstance时都调用realm.Dispose()

    对。最终,当您不再使用领域实例时,您应该
    对它们进行处置。这将释放任何消耗的资源(本机和托管)

    通常,我会在应用程序的生命周期内(遵循每个平台的应用程序生命周期)打开一个UI线程实例。i、 e.我将这个
    领域
    实例视为一个
    HttpClient
    实例,一个可以从中打开其他实例的应用程序级单例。现在,当我通过服务、广播接收器、推送更新等更新数据库时,我在后台线程上打开并处理实例

    注意:请记住,如果您在后台线程上,并且在该线程上获得相同
    RealmConfigurationBase
    的多个领域实例,那么它们实际上都是相同的领域实例(
    Realm.IsSameInstance
    )。您可以对每个实例调用Dispose,但在该线程上的所有实例都被释放之前,不会实际关闭(
    Realm.IsClosed
    )该实例

    WriteAsync是否负责关闭/处理域

    对。您不希望对传递到
    WriteAsync
    lamba函数中的领域实例调用
    Dispose

    事实上,如果您这样做,您将收到一个
    System.ObjectDisposedException
    ,因为Realm已经用事务块包装了lamba,并且您已经在提交或回滚事务之前处理了Realm实例

    我是否必须对realm.WriteAsync使用wait作为异步方法

    关于fire&forget异步方法调用,请参考许多其他SOs,即: