處理領域的交易在幾件樣品代碼在那裏,我見過像這樣的模式:如何在Android
try (Realm realm = Realm.getDefaultInstance()) {
realm.beginTransaction();
workWithRealmData();
realm.commitTransaction();
}
的問題是 - 這是安全的嗎?如果「workWithRealmData()」函數引發異常,則該事務不會被取消。但是,我們終於在試用資源的時候關閉了領域。
一個更安全的建築看起來像下面這樣:
try (Realm realm = Realm.getDefaultInstance()) {
realm.beginTransaction();
try {
workWithRealmData();
realm.commitTransaction();
} finally {
if (realm.isInTransaction()) {
realm.cancelTransaction();
}
}
}
這看起來更安全 - 但看起來也顯著厲害,爲所有callsites編碼。
所以這真的可以歸結爲 - 如果Realm在之後立即關閉,是否可以忽略cancelTransaction?如果不是,會出現什麼問題?
如果你關閉領域,那麼忽略'cancelTransaction'是安全的。但它對我來說確實感覺有點不安全,因爲如果你錯過了一個地方,那麼你會阻止一個線程。 –
太好了 - 謝謝你的確認,基督徒! – tmtrademark