diff --git a/Sources/SwiftDoc/Extensions/Array+Parallel.swift b/Sources/SwiftDoc/Extensions/Array+Parallel.swift index 1e98a7bc..d2aa6411 100644 --- a/Sources/SwiftDoc/Extensions/Array+Parallel.swift +++ b/Sources/SwiftDoc/Extensions/Array+Parallel.swift @@ -7,30 +7,23 @@ public extension RandomAccessCollection { } let indices = Array(self.indices) - - var results = [(index: Index, result: Result)]() - results.reserveCapacity(count) + var results = [Result?](repeating: nil, count: count) let queue = DispatchQueue(label: #function) - withoutActuallyEscaping(transform) { escapingtransform in - DispatchQueue.concurrentPerform(iterations: count) { (iteration) in - let index = indices[iteration] - - do { - let transformed = try escapingtransform(self[index]) - queue.sync { - results.append((index, .success(transformed))) - } - } catch { - queue.sync { - results.append((index, .failure(error))) - } + DispatchQueue.concurrentPerform(iterations: count) { (iteration) in + do { + let transformed = try transform(self[indices[iteration]]) + queue.sync { + results[iteration] = .success(transformed) + } + } catch { + queue.sync { + results[iteration] = .failure(error) } } } - return try results.sorted { $0.index < $1.index } - .map { try $0.result.get() } + return try results.map { try $0!.get() } } func parallelCompactMap(transform: (Element) throws -> T?) throws -> [T] {