Что странно, в отличие от других примеров групп задач, которые я видел, мне фактически не нужны значения из метода async throws. Они выполняют действия и записывают их на диск.
Нет ли способа очистить этот код?
Код: Выделить всё
let swiftAsyncSemaphore = DispatchSemaphore(value: 0)
let taskGroupTask = Task {
await withThrowingTaskGroup(of: ASRJob.self) { group in
for path in filePathsToWorkOn {
group.addTask {
return try await doHardWork(atPath: path)
}
}
do {
for try await _ in group {
// For now we do not store this information
}
} catch {
// For now we do not store the error
}
}
swiftAsyncSemaphore.signal()
}
swiftAsyncSemaphore.wait()
Контекст того, где будет выполняться этот код:
Этот код выполняется в блоке main() синхронной операции (NSOperation), которая входит в OperationQueue. Таким образом, ожидание вызова блока не находится в быстром асинхронном коде. Цель состоит в том, чтобы заблокировать завершение операций до тех пор, пока эта быстрая асинхронная работа не будет завершена, зная, что она вполне может выполняться в течение длительного времени.
Подробнее здесь: https://stackoverflow.com/questions/767 ... task-group
Мобильная версия