Das Seltsame ist, dass ich im Gegensatz zu anderen Beispielen von Aufgabengruppen, die ich gesehen habe, die Werte aus der Async-Throws-Methode tatsächlich nicht benötige. Sie führen Aktionen aus und schreiben sie auf die Festplatte.
Gibt es keine Möglichkeit, diesen Code zu bereinigen?
Code: Select all
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()
Kontext, wo dieser Code ausgeführt wird:
Dieser Code wird im main()-Block einer synchronen Operation (NSOperation) ausgeführt, die in eine OperationQueue geht. Der Block, der „wait“ aufruft, befindet sich also nicht in schnellem asynchronem Code. Das Ziel besteht darin, den Abschluss der Vorgänge zu blockieren, bis diese schnelle asynchrone Arbeit erledigt ist, in dem Wissen, dass sie möglicherweise sehr lange ausgeführt wird.
Mobile version