swift - DispatchGroup 会永远等待吗?
问题描述
我想知道以下情况。
我有一个DispatchGroup
内部函数。现在我在后台线程上进入组并调用wait()
.
func test() {
let group = DispatchGroup()
DispatchQueue.global().async {
group.enter()
group.wait()
}
}
我的问题是在主线程离开函数后,组是永远等待还是被释放?
我不确定是否有任何引用或捕获。我会非常感谢一些解释,这个话题让我有点困惑。
先感谢您!
解决方案
是的,它将永远等待。
被group
捕获,因此不会被释放。而且,很明显,你最终会锁定那个特定的工作线程。由于工作线程非常有限,这比DispatchGroup
.
如果您希望它超时,请使用wait(timeout:)
.
推荐阅读
- visual-studio - 何时在 Visual Studio 中构建或重建 SSIS 项目?
- java - 在 Java 中的 GUI 中创建延迟
- java - 如何在 HttpRequest 中设置路径和查询参数?
- asana - Asana 没有使用 API 返回项目的所有任务
- postgresql - last_analyzed 用于外部表
- python - 使用字典字段实例化对象打印为空
- ios - 如何在 Swift 中打开 .ics 文件?
- python - 使用 python flask restx,如何在不上传整个文件的情况下知道文件名
- python - 为什么 VSCode 需要永远查找引用并且无法重命名符号?
- reportgenerator - Reportgenerator 在转换为 Cobertura 和 Sonar 格式时会跳过特定的项目覆盖范围