Swift-大型for循环的同步执行,没有完成处理程序

时间:2018-10-31 05:56:25

标签: swift asynchronous synchronization

这更多是一个理论问题。如果我有一个大的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 :(得分:3)

不需要调度组。只需在后台运行循环即可。循环完成后,根据需要在主队列上调用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)
    }
}

当然,这假设您的真实代码在循环内没有进行任何异步处理。