Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

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

За да реализирате възможността за прекъсване, трябва сами да предвидите проверка на флаг за отмена вътре в самата задача. Например, използвайте атомна променлива или флаг, който периодично се проверява по време на изпълнението на задачата и при необходимост да се прекратява работата предварително.

Пример:

var isCancelled = false

dispatchQueue.async {
    for i in 0..<1000 {
        if isCancelled {
            print("Задачата е отменена")
            break
        }
        // Изпълнение на част от работата
    }
}

// На друго място
isCancelled = true

Ако е необходима по-гъвкава отмена, разгледайте използването на Operation и OperationQueue, които имат вградена поддръжка за отменяне на операции.