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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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