- Get link
- Other Apps
In this post, I will share my knowledge about how to synchronise async code in swift programming language. Puzzled? Let read it to clarify :)
In my current project, I had to develop a solution where I need to perform multiple api calls in a loop, but synchronously and application should not freeze.
Initially, I tried with DispatchGroup, but this approach was successful only if I have to run all apis calls asynchronously. Let’s look at below code snippet which illustrate the difference between DispatchGroup and DispatchSemaphore.
DispatchGroup:
In below example, api.performSomeAction() will be executed concurrently.
This method call api in asynchronous manner. /// - parameter ids: Array of identifer which will pass to api's post data private func insertData(ids: [String]) { let group = DispatchGroup() ///Method which will execute when below if loop completes // (When dispatch group is notified) func completion() { //Perform some action in the end } ///All api calls will be parallel. for identifier in ids { group.enter() api.performSomeAction(id: identifier, success: { [weak self] _ in group.leave() }, failure: { _ in group.leave() }) } group.notify(queue: .main) { completion() }
}
DispatchSemaphore
In below example, api.performSomeAction() will be executed sequentially.
/// This method call api in synchronous manner without blocking the UI
/// - parameter ids: Array of identifer which will pass to api's post data
private func insertData(ids: [String]) {
let group = DispatchGroup()
///Method which will execute when below if loop completes
func completion() {
//Perform some action in the end
}
DispatchQueue.global().async {
let semaphore = DispatchSemaphore(value: 0)
///All api calls will be sequential.
for identifier in ids {
api.performSomeAction(id: identifier, success: { [weak self] _ in
semaphore.signal()
}, failure: { (_) in
semaphore.signal()
})
_ = semaphore.wait(timeout: .distantFuture)
}
completion()
}
}
Conclusion:
Dispatch Semaphore: A shared resource is not accessed at the same time using semaphore. Dispatch Group: If tasks are independent of one another, use dispatch group.
You have made your points in a smart way. I am impressed with how interesting you have been able to present this content. Thanks for sharing nice information.
ReplyDeleteGraphic Design Courses in South Delhi
Your contents are completely awesome and share worthy. I really appreciate your efforts that you put on this. Keep sharing.
ReplyDeleteC++ Training Institute in Delhi
Wow, What an Excellent post. I really found this to much informative. It is what I was searching for. I would like to suggest you that please keep sharing such type of info.ready made wordpress website
ReplyDelete