标签: dispatchgroup

DispatchGroup 会永远等待吗?

我想知道以下场景。

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

func test() {
   let group = DispatchGroup()
   
   DispatchQueue.global().async {
      group.enter()
      group.wait()
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

先感谢您!

concurrency multithreading grand-central-dispatch swift dispatchgroup

3
推荐指数
1
解决办法
72
查看次数

如何使用 Dispatch Groups 等待调用依赖于不同数据的多个函数?

我有三个变量abc。我有三个带有完成块的异步函数来更新这些变量,另外三个函数只处理一些数据。

我确保工作函数等到所有数据都更新为DispatchGroup.

// The Data
var a: String?
var b: String?
var c: String?

// The Update
let group = DispatchGroup()

group.enter()
updateA() {
    group.leave()
}

group.enter()
updateB() {
    group.leave()
}

group.enter()
updateC() {
    group.leave()
}

group.wait()

// The work
doSomthingWith(a: a, b: b)
doSomethingElseWith(b: b, c: c)
doAnotherThingWith(a: a, c: c)
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是在参数更新后调用每个工作函数,而不是等待一切。这只是一个(显然)简化版本。可能有更多的变量和函数。

我正在使用斯威夫特。提前谢谢了。

grand-central-dispatch swift dispatchgroup

2
推荐指数
1
解决办法
1869
查看次数

添加一个 BlockOperation 对另一个 BlockOperation 的依赖在 swift 中无法正常工作

我在控制器中有多个 api,成功响应后我必须重新加载UITableView.

现在我从两个 api 开始,第二个 api 依赖于第一个 usingBlockOperationDispatchGroupin it。

首先在viewDidLoad

getDataFromAllApis {
    self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

然后我添加了方法:

func getDataFromAllApis(completion: @escaping (() -> Void)) {

    let queue = OperationQueue()

    let getFirstDataOperation = BlockOperation {
        let group = DispatchGroup()
        group.enter()
        self.getFirstDataFromApi {
            group.leave()
        }
        group.wait()
    }
    queue.addOperation(getFirstDataOperation)

    let getSecondDataOperation = BlockOperation {
        let group = DispatchGroup()
        group.enter()
        self.getSecondDataFromApi {
            group.leave()
        }

        group.notify(queue: .main) {
            completion()
        }
    }
    queue.addOperation(getSecondDataOperation)

    getSecondDataOperation.addDependency(getFirstDataOperation)
}
Run Code Online (Sandbox Code Playgroud)

我在这里面临的问题是 getSecondDataOperation 首先执行并返回到 tableview 重新加载部分。

我在这里遗漏了什么还是可以有不同的方法?任何帮助将不胜感激。 …

ios swift blockoperation dispatchgroup

0
推荐指数
1
解决办法
369
查看次数