ios - 串行队列 API 多个服务调用

标签 ios swift queue

如何在 swift 4 中通过串行队列进行多个 Web 服务调用(即在第一个调用完成后开始第二个调用)

 func allConcurretExce(completion: @escaping () -> ()) {
    let queue = DispatchQueue(label: "reverseDomain", attributes: .concurrent)
    let group = DispatchGroup()


    queue.async (group: group) {

        print("first call")

      self.userSignIn()


    }


    queue.async (group: group) {
        //group.wait(timeout : .now() + .seconds(3))
        print("second call")
        self.getMeData(token: self.token)


    }

    group.notify(queue: DispatchQueue.main) {
        completion()
    }
}

这就是我在第一次调用完成时所做的事情,我得到了 token 并将该 token 发送到另一个调用。但是我现在实现的是同时获得两个调用,这导致我的第二次调用出现错误。我的目标是从第一个获取 token 并将其发送到第二个而不使用处理程序。我想通过队列来实现这一点。

最佳答案

您可以在 swift 中使用 DispatchSemaphore 来实现这一点。这将阻塞您的线程,直到一项任务结束,然后您可以开始另一项任务。检查下面的示例。

class HttpClassForGetData: NSObject {

    var result: Any? = nil
    var sem = DispatchSemaphore(value: 0) // create semaphore

    init() {

        // create post request
        let url = URL("example.com")!

        var request = URLRequest(url: url)
        request.httpMethod = "GET"

        let session = URLSession(configuration: URLSessionConfiguration.default, delegate:nil, delegateQueue:OperationQueue.main)
        var DATA = session.uploadTask(withStreamedRequest: request) // use uploadTask with completion handler API here.and in your API call completion block call self.sem.signal() method.
        result = DATA

        // continue work in anybodyclass.swift class
        _ = sem.wait(timeout: .distantFuture) // lock calling thread, put this code at the end
    }

}

并在您的 API 调用完成 block 中调用 self.sem.signal() 方法。有疑问请评论。

关于ios - 串行队列 API 多个服务调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627701/

相关文章:

Python multiprocessing RemoteManager 下的一个 multiprocessing.Process

collections - VecDeque 环形缓冲区在内部是如何工作的?

java - 这是否返回一个空列表?

ios - 如何在 Swift 中将 UInt64.max 转换为字符串?

ios - 滚动时将函数分配给 UIScrollView (Swift)

swift - 以编程方式添加 View 和手势 - "unrecognized selector sent to instance"

ios - 在 Swift 4 中从字符串对象创建 CFData 对象

ios - 在 Swift 中访问 C 宏

带有自定义标签栏的 iOS 应用

reflection - 如何动态测试 Self 类型和不相关的类型