首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行队列API多服务调用

串行队列API多服务调用
EN

Stack Overflow用户
提问于 2018-08-01 15:31:47
回答 1查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
 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()
    }
}

这就是我正在做的事情,当我的第一个调用完成时,我得到了令牌,并将令牌发送到另一个call.But。我现在实现的是同时获得两个调用,这在我的第二个call.My中导致了错误。我的目标是从第一个获得令牌,并在不使用处理器的情况下发送到第二个。我想通过队列来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 15:57:22

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

代码语言:javascript
复制
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
    }

}

并在您的应用程序接口调用完成块中调用self.sem.signal()方法。如有任何疑问,请发表意见。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51627701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档