Sobes.tech
Junior — Middle

Je možné zrušiť vykonávanie úlohy pri použití GCD v iOS?

sobes.tech AI

Odpoveď od AI

V GCD (Grand Central Dispatch) na iOS nie je možné priamo zrušiť úlohu, ak je už spustená. GCD ne poskytuje zabudovaný mechanizmus na prerušenie bežiaceho bloku.

Avšak, je možné implementovať nepriamu zrušenie:

  • Použitím vlajok alebo premenných stavu, ktoré sa kontrolujú vo vnútri bloku úlohy a v prípade potreby ukončia vykonávanie skôr.
  • Pre asynchrónne operácie použiť DispatchWorkItem, ktorý podporuje metódu cancel(). Zrušenie cez DispatchWorkItem zabráni spusteniu úlohy, ak ešte nezačala.

Príklad s DispatchWorkItem:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Úloha zrušená")
            return
        }
        // Vykonanie práce
        print(i)
    }
}

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

// Zrušiť úlohu
workItem.cancel()

Týmto spôsobom je možné zrušiť úlohu pred jej začatím alebo vo vnútri nej kontrolou vlajky, ale nie je možné prerušiť už bežiaci blok v GCD.