Swift Async ожидает всех задач в группе задачIOS

Программируем под IOS
Anonymous
Swift Async ожидает всех задач в группе задач

Сообщение Anonymous »

Я использую группу задач для переноса повторяющихся вызовов в давно работающий асинхронный метод. Поскольку у меня может быть много вызовов этого метода, которые должны произойти, я надеюсь, что они будут выполняться параллельно. В конце концов, у меня есть некоторый обычный синхронный код, который нужно блокировать до тех пор, пока не будут вызваны все эти асинхронные операции.
Что странно, в отличие от других примеров групп задач, которые я видел, мне фактически не нужны значения из метода 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

Вернуться в «IOS»