如何使用异步回调进行同步操作?
如何使用异步函数进行同步操作?
class MyClass { static let shared = MyClass() let operationQueue = OperationQueue() let dispatchGroup = DispatchGroup() func request(_ myRequestURL: URL) { operationQueue.addOperation { self.dispatchGroup.enter() // Async function Alamofire.request(myRequestURL).response { response in print(response.request) self.dispatchGroup.leave() } self.dispatchGroup.wait(timeout: .distantFuture) } } }
MyClass.shared.request(A)
MyClass.shared.request(B)
MyClass.shared.request(C)输出:C> A> B.
预期:A> B> C.
我知道有一个完成块方法可以这样做。 但请求将嵌套。
func request(_ myRequestURL: URL, completion: @escaping (_ data: Data?) -> Void) { // Async function Alamofire.request(myRequestURL).response { response in completion(response.data) } }
MyClass.shared.request(A){_ in
MyClass.shared.request(B){_ in
MyClass.shared.request(C){_ in
}
}
}
它适用于我使用DispatchQueue
。
class MyClass { static let shared = MyClass() let dispatchQueue = DispatchQueue(label: "ALAMOFIRE_REQUEST") let dispatchGroup = DispatchGroup() func request(_ myRequestURL: URL) { dispatchQueue.async { self.dispatchGroup.enter() // Async function Alamofire.request(myRequestURL).response { response in print(response.request) self.dispatchGroup.leave() } self.dispatchGroup.wait(timeout: .distantFuture) } } }
- '+ entityForName:nil不是合法的NSManagedObjectContext参数 – 核心数据
- 如何在SceneKit中加载多个对象?
- 出队后,自定义UICollectionViewCell属性为空
- 如何在IOS应用程序下载m3uvideo?
- iOS UITabBar:删除顶部阴影渐变线
- Xcode升级到4.5后应用程序崩溃。 将保留的对象分配给unsafe_unretainedvariables
- 是否有可能改变UIWebview IOS中的文本select颜色?
- 在iOS6中,在推入堆栈时遇到问题,强制ViewController到某个interfaceOrientation
- 即使内容/压缩设置为1,图像也会增长