Запуск функции в фоновом потоке в Swift IOSIOS

Программируем под IOS
Ответить
Anonymous
 Запуск функции в фоновом потоке в Swift IOS

Сообщение Anonymous »

Я новичок в разработке 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
Ответить

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

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

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

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

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