【问题标题】:Does DispatchGroup wait forever?DispatchGroup 会永远等待吗?
【发布时间】:2021-02-03 16:28:23
【问题描述】:

我想知道以下情况。

我在函数中有一个DispatchGroup。现在我正在后台线程上进入组并调用wait()

func test() {
   let group = DispatchGroup()
   
   DispatchQueue.global().async {
      group.enter()
      group.wait()
   }
}

我的问题是,在主线程离开函数后,组是永远等待还是被释放?

我不确定是否有任何引用或捕获。非常感谢您的解释,这个话题让我有点困惑。

提前谢谢你!

【问题讨论】:

    标签: swift multithreading concurrency grand-central-dispatch dispatchgroup


    【解决方案1】:

    是的,它将永远等待。

    group 已被捕获,因此不会被释放。而且,很明显,你最终会锁定那个特定的工作线程。由于工作线程非常有限,这比DispatchGroup 消耗的内存量更令人担忧。

    如果您希望它超时,请使用wait(timeout:)

    【讨论】:

    • 只是对本来很好的答案的一个小补充:出于这个确切原因,通常最好使用DispatchGroup.notify(queue:execute),它不会阻塞队列,而是异步等待。
    • 太棒了,非常感谢你们两个:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2013-11-24
    • 2012-02-24
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    相关资源
    最近更新 更多