多线程

异步网络请求串行

let group = DispatchGroup()
//    let queue = DispatchQueue(label: "current", attributes: .concurrent)
    let queue = DispatchQueue(label: "current")
    let sema = DispatchSemaphore(value: 0)

func test() {
        queue.async(group: group) {
            DispatchQueue.delay(2) {
                print("1")
                self.sema.signal()
            }
            print("1 ----")
            
            _ = self.sema.wait(timeout: .distantFuture)
        }
        
        queue.async(group: group) {
            DispatchQueue.delay(1) {
                print("2")
                self.sema.signal()
            }
            print("2 ----")
            
            _ = self.sema.wait(timeout: .distantFuture)
        }
        
        
        queue.async(group: group) {
            DispatchQueue.delay(2) {
                print("3")
                self.sema.signal()
            }
            print("3 ----")
            
            _ = self.sema.wait(timeout: .distantFuture)
        }
        
        group.notify(queue: queue) {
            print("finish")
        }
    }

DispatchSemaphore初始值为1

let group = DispatchGroup()
    let queue = DispatchQueue(label: "current")
    let sema = DispatchSemaphore(value: 1)

func test() {
        
        queue.async(group: group) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            DispatchQueue.delay(2) {
                print("1")
                self.sema.signal()
            }
            print("1 ----")
        }

        
        
        queue.async(group: group) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            DispatchQueue.delay(1) {
                print("2")
                self.sema.signal()
            }
            print("2 ----")
        }

        
        queue.async(group: group) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            DispatchQueue.delay(2) {
                print("3")
                self.sema.signal()
            }
            print("3 ----")
        }

        group.notify(queue: queue) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            print("finish")
        }
    }

DispatchSemaphore初始值为0还是1,看个人需求和习惯吧

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容