Каков объем блока? - PullRequest
       19

Каков объем блока?

0 голосов
/ 30 августа 2018

У меня есть несколько функций, каждая из которых выполняет определенную задачу, связанную с Царством. И еще одна функция, которая отправляет некоторую последовательность этих вызовов в фоновую последовательную очередь, как показано ниже:

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 фактически находится в своих отдельных блоках.

Потому что, если они не все находятся в одном и том же контексте блока, то я не могу принудительно создать создание области в этих вызовах, поскольку они могут не выполняться в одном потоке, насколько я понимаю.

...