Sobes.tech
Junior — Middle

Is het mogelijk om de uitvoering van een taak te annuleren bij gebruik van GCD in iOS?

sobes.tech AI

Antwoord van AI

In GCD (Grand Central Dispatch) op iOS is het niet mogelijk om een taak direct te annuleren als de taak al is gestart. GCD biedt geen ingebouwd mechanisme om een lopend blok te onderbreken.

Echter, je kunt een indirecte annulering implementeren:

  • Gebruik flags of statusvariabelen die binnen het taakblok worden gecontroleerd en indien nodig de uitvoering voortijdig beëindigen.
  • Voor asynchrone operaties, gebruik DispatchWorkItem, dat de methode cancel() ondersteunt. Annuleren via DispatchWorkItem voorkomt dat de taak wordt gestart als deze nog niet is begonnen.

Voorbeeld met DispatchWorkItem:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Taak geannuleerd")
            return
        }
        // Voer werk uit
        print(i)
    }
}

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

// Annuleer de taak
workItem.cancel()

Zo is annulering mogelijk vóór de start of binnen de taak door de flag te controleren, maar het is niet mogelijk om een al lopende blok in GCD te onderbreken.