У меня есть несколько функций, каждая из которых выполняет определенную задачу, связанную с Царством. И еще одна функция, которая отправляет некоторую последовательность этих вызовов в фоновую последовательную очередь, как показано ниже:
let serialQueue = DispatchQueue(label: "com.CanHarveyDentBeTrusted", qos: DispatchQoS.userInitiated)
func doStuff() {
serialQueue.async {
a()
b()
c()
d()
e()
f()
}
}
В этой ссылке: https://github.com/realm/realm-cocoa/issues/1970, bdash говорит:
"Область использует ограничение потока для своих объектов, поэтому вам необходимо убедиться, что вся работа с данным объектом выполняется в одном потоке. Поскольку GCD не гарантирует, что все блоки, отправленные в данную последовательную очередь, будут выполнить в том же потоке, вам нужно будет получить новый экземпляр Realm внутри каждого блока . "
Итак, сейчас все функции a-f создают экземпляр Realm в блоке do try catch, а затем выполняют свою собственную работу с объектом realm.
У меня вопрос: если у меня есть несколько различных последовательностей, включающих функции a-f, но все последовательности будут начинаться с функции a, могу ли я заставить b-f вызвать создание области?
Из документов Королевства (https://realm.io/docs/swift/latest):
"Как и любая операция с дисковым вводом / выводом, создание экземпляра Realm может иногда завершаться сбоем, если ресурсы ограничены. На практике это может происходить только при первом создании экземпляра Realm в данном потоке. Последующий доступ к область из того же потока будет повторно использовать кэшированный экземпляр и всегда будет иметь успех . "
Я не знаю, будет ли doStuff () отправлять все эти вызовы как один блок , причем каждый вызов a-f находится внутри этого одного блока. Или, если каждый вызов a-f фактически находится в своих отдельных блоках.
Потому что, если они не все находятся в одном и том же контексте блока, то я не могу принудительно создать создание области в этих вызовах, поскольку они могут не выполняться в одном потоке, насколько я понимаю.