ConcurrentPerform vs. For-Loop with Concurrent Async in iOS

Durul Dalkanat
2 min readMay 28, 2024

In iOS development, concurrency is crucial when dealing with asynchronous operations. These operations can include network requests, file operations, or any task that might take some time to complete. iOS provides several mechanisms to handle concurrency, and two popular approaches are the concurrentPerform method and the traditional for-loop with concurrent async operations.

The Traditional For-Loop with Concurrent Async Operations

The traditional approach to handling concurrent operations in iOS involves using a for-loop and dispatching each operation to a concurrent queue.

var operations = [BlockOperation(block: {
}), BlockOperation(block: {
}), BlockOperation(block: {

for operation in operations {
concurrentQueue.async {
print("operation \(operation)")


In this approach, we create a concurrent DispatchQueue and an array of operations. Then, we iterate over the array and dispatch each operation to the concurrent queue using the async method. This approach is straightforward to use, but it has a few drawbacks:

  1. Limited Control: With this approach, we have limited control over the execution order of the operations. The operations are executed concurrently, but their order is not guaranteed.
  2. Manual Dependency Management: If an operation depends on the…