Sobes.tech
Junior — Middle

Може ли да се прекъсне изпълнението на задача в GCD преди нейното завършване?

sobes.tech AI

Отговор от AI

В GCD (Grand Central Dispatch) не е възможно директно да прекъснете вече стартирана задача. Задачите, изпратени към опашката, се изпълняват до завършване.

Въпреки това, можете косвено да реализирате отказване на задача:

  • За асинхронни задачи използвайте DispatchWorkItem, който поддържа метода cancel(). Самата задача трябва периодично да проверява свойството isCancelled и да завършва правилно, ако е поискана отмена.

Пример:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Задачата е отменена")
            return
        }
        // Изпълнение на работата
    }
}

DispatchQueue.global().async(execute: workItem)

// По-късно
workItem.cancel()

Така, отменянето е възможно само ако задачата поддържа проверка за отмена, иначе не може да бъде принудително прекъсната.