Sobes.tech
Junior — Middle

Lze přerušit provádění úkolu v GCD před jeho dokončením?

sobes.tech AI

Odpověď od AI

V GCD (Grand Central Dispatch) nelze přímo přerušit již spuštěný úkol. Úkoly odeslané do fronty se vykonávají až do dokončení.

Nicméně, lze implementovat jeho zrušení nepřímo:

  • Pro asynchronní úkoly použijte DispatchWorkItem, který podporuje metodu cancel(). Samotný úkol by měl pravidelně kontrolovat vlastnost isCancelled a správně ukončit, pokud je požadováno zrušení.

Příklad:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Úkol zrušen")
            return
        }
        // Provádění práce
    }
}

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

// Později
workItem.cancel()

Tímto způsobem je možné zrušení pouze v případě, že úkol podporuje kontrolu zrušení, jinak jej nelze násilně přerušit.