Ios 调度组通知不工作

Ios 调度组通知不工作,ios,swift,grand-central-dispatch,Ios,Swift,Grand Central Dispatch,我正在学习GCD。举一个这样的例子: 我创建函数调用三个异步块,并使用调度组进入和离开每个块 似乎group.enter(),group.leave()被调用了三次,但该组没有为我通知 我想询问有关此代码的问题,请帮助我。 这是我的密码: func myFunction() { let group = DispatchGroup() let queue = DispatchQueue.global(qos: .default) print("start") for i in

我正在学习GCD。举一个这样的例子:

我创建函数调用三个异步块,并使用调度组进入和离开每个块 似乎group.enter(),group.leave()被调用了三次,但该组没有为我通知

我想询问有关此代码的问题,请帮助我。 这是我的密码:

func myFunction() {
  let group = DispatchGroup()
  let queue = DispatchQueue.global(qos: .default)
  print("start")

  for i in 0..<3 {
    let count = 100/(i+1)
    var a = 0

    group.enter()
    print("enter queue \(i)")
    queue.async(group: group, execute: {
        for index in 0..<count {
            a = a + index
        }

        print("0..<\(count) with i: \(i)", a)
        group.leave()
        print("leave queue \(i)")
    })
  }

  group.notify(queue: .main) {
    print("after queue doing")
  }
}
func myFunction(){
let group=DispatchGroup()
let queue=DispatchQueue.global(qos:.默认值)
打印(“开始”)

对于0中的i..如果您正在操场上执行异步代码,则需要通过在顶部添加以下代码来启用不确定执行:

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

我可以在操场上测试你的代码,它工作得很好。

如果你把代码放在一个代码块中,可能会更容易,然后它可以被剪切和粘贴,这样人们就可以轻松地尝试它,粘贴他们的修改版本等。谢谢你的指导。我已经把我的代码here@phitướcnguyễnvăn您的代码在设备上运行良好,我认为因为您的代码使多线程同时修改数组,所以它会创建某种内部错误opp,这很有趣,哈哈。感谢您的测试@Tj3n,我不会在设备上测试它,因为我无法在操场上运行它。如果您进行100或1000次循环,它肯定会在设备上给您带来致命错误,无论是从ems虽然不能在操场中输出错误,但也不会调用group.notify