Я выполняю запрос области для каждого слова в документе и использую результат, чтобы выделить определенные слова. Поскольку у меня много запросов, и хорошо, что подчеркивания не появляются сразу, я хочу запускать их в фоновом режиме.
Я видел в документах, что если я добавлю наблюдателя в набор результатов, Realm сделает это в фоновом режиме. Но запросы все еще блокируют мой основной поток (т. Е. Я получаю заметную задержку при вставке нескольких абзацев текста и запросе каждого слова).
Я также видел в документах, что если я пытаюсь использовать набор результатов до сообщения .initial
, Realm переходит в основную очередь. Я не думаю, что я делаю это в коде ниже, либо.
Может быть, я обесценил токены?
Можно ли заставить Realm остаться в фоновом потоке?
Я бы хотел избежать сложности передачи ссылок между потоками, что я должен был бы сделать, если бы создал экземпляр своего Царства в фоновом потоке.
print("db: hit \(word)")
let results = Shared.instance
.realm
.objects(google10kWords.self).filter("word == \"\(word.lemma.lowercased())\"")
let notificationToken = results.observe { (change) in
switch change {
case .initial:
if let rank = results.first?.rank.value {
let rankPct = Float((Float(rank)/10000.0))
complete(rankPct)
} else {
complete(1.0)
}
case .update(_, deletions: _, insertions: _, modifications: _):
print("db: update")
case .error(let error):
print("db: Error \(error)")
}
}
DispatchQueue.main.asyncAfter(deadline: .now()+1.2) {
notificationToken.invalidate()
}
}