[Swift 开发] 异步结果作为函数返回值

[Swift 开发] 异步结果作为函数返回值,第1张

当您将异步结果作为函数返回值时,函数标记为异步,您就允许它挂起。当一个函数挂起自己时,它也会挂起它的调用者。所以它的调用者也必须是异步的。为了指出异步函数中它可能挂起一次或多次的位置,使用了Semaphore(信号量) 关键字。当异步函数被挂起时,函数线程会被阻塞。当异步函数恢复时,从它调用的异步函数返回的结果流回原始函数,并从上次停止的地方继续执行。
// 惯例来个Person类
class Person {
    class func waitResult() -> [Int] {
        let queue = DispatchQueue(label: "currentQueue", attributes: .concurrent)
        let group = DispatchGroup()

        // 创建信号量,value == 0 会被wait堵塞
        // 等待signal() value == 1 释放堵塞
        let semaphore = DispatchSemaphore(value: 0)
        var arr = [Int]()
        
        queue.async(group: group) {
            // ...some....
            sleep(3)
            
            // 得到返回值
            arr = [1]
            
            // 释放信号量
            semaphore.signal()
        }

        // 等待信号量释放
        semaphore.wait()
        
        return arr
    }
}

print("开始")

print(Person.waitResult())

print("结束")


// 开始
// [1]
// 结束

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/989543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存