Я новичок в разработке Swift и iOS, и мне нужна помощь со структурированным параллелизмом. Мне нужна долго выполняющаяся функция, которая будет выполняться в фоновом потоке и будет отменена, если она будет вызвана снова перед завершением. К сожалению, мой код позволяет запустить второй вызов до того, как текущая задача завершит отмену.
Может ли кто-нибудь привести пример того, как это правильно сделать?
Я удалил "кишки" " из моего кода и просто оставил структуру параллелизма на месте.
Функция "doLongWork()" вызывается из пользовательского интерфейса и запускает функцию "longWork()" в фоновом режиме после отмены предыдущей задачи, если таковая имеется. существует.
class SomeClass {
var workItem: DispatchWorkItem?
var queue1 = DispatchQueue(label: “serialQueue”))
func doLongWork() {
if workItem != nil {
queue1.async(flags: .barrier) { /* barrier */ }
workItem?.cancel()
}
workItem = DispatchWorkItem { self.longWork() }
queue1.async{ self.workItem?.perform() }
}
func longWork() {
func recursiveFunction() {
if let cancelled = workItem?.isCancelled {
if cancelled { return }
}
// calculations
}
recursiveFunction()
if let cancelled = workItem?.isCancelled {
if cancelled {return}
}
OperationQueue.main.addOperation {
// update ui
}
workItem = nil
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -swift-ios