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

  1. 当您将异步结果作为函数返回值时,函数标记为异步,您就允许它挂起。当一个函数挂起自己时,它也会挂起它的调用者。所以它的调用者也必须是异步的。
  2. 为了指出异步函数中它可能挂起一次或多次的位置,使用了Semaphore(信号量) 关键字。
  3. 当异步函数被挂起时,函数线程会被阻塞。
  4. 当异步函数恢复时,从它调用的异步函数返回的结果流回原始函数,并从上次停止的地方继续执行。
// 惯例来个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]
// 结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值