Swift - синхронное выполнение большого цикла for без обработчиков завершения - PullRequest
0 голосов
/ 31 октября 2018

Это больше вопрос теории. Если у меня есть большой цикл for, скажем

   var array = []
   let myGroup = DispatchGroup()
   for i in 0..<1000000000 {
       myGroup.enter()
       let x = i + 1
       let y = (x/2 * 15832) ^ 15
       array.append(x)
       array.append(y)
       myGroup.leave()
    }
    myGroup.notify(queue: .main) {
       performOperationForArray(array:array)
    }

Будет ли это гарантировать, что все содержимое цикла for будет выполнено до performOperationForArray? Даже если вычисления внутри цикла не имеют обработчика завершения для себя?

Спасибо.

1 Ответ

0 голосов
/ 31 октября 2018

Для группы отправки нет необходимости. Просто запустите цикл в фоновом режиме. Когда цикл завершен, при необходимости вызовите performOperationForArray в главной очереди.

DispatchQueue.global().async {
   var array = []
   for i in 0..<1000000000 {
       let x = i + 1
       let y = (x/2 * 15832) ^ 15
       array.append(x)
       array.append(y)
    }

    DispatchQueue.main.async {
        performOperationForArray(array:array)
    }
}

Конечно, это предполагает, что ваш реальный код не выполняет асинхронную обработку внутри цикла.

...