gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:17:18 25 4
gpt4 key购买 nike

如何在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com