Sobes.tech
Junior — Middle

Je možné zrušit provádění úkolu při použití GCD v iOS?

sobes.tech AI

Odpověď od AI

V GCD (Grand Central Dispatch) na iOS není možné přímo zrušit úlohu, pokud již byla spuštěna. GCD nepodporuje vestavěný mechanismus pro přerušení právě běžícího bloku.

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

  • Použitím vlajek nebo proměnných stavu, které jsou kontrolovány uvnitř bloku úlohy a v případě potřeby předčasně ukončí vykonávání.
  • Pro asynchronní operace použít DispatchWorkItem, který podporuje metodu cancel(). Zrušení přes DispatchWorkItem zabrání spuštění úlohy, pokud ještě nezačala.

Příklad s DispatchWorkItem:

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

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

// Zrušení úlohy
workItem.cancel()

Tímto způsobem je možné zrušit úlohu před jejím začátkem nebo uvnitř ní kontrolou vlajky, ale nelze přerušit již běžící blok v GCD.