Sobes.tech
Junior — Middle

Kun je de uitvoering van een taak in GCD onderbreken voordat deze voltooid is?

sobes.tech AI

Antwoord van AI

In GCD (Grand Central Dispatch) is het niet mogelijk om een taak die al gestart is direct te onderbreken. Taken die naar de wachtrij zijn gestuurd, worden tot voltooiing uitgevoerd.

Echter, het is mogelijk om een taak indirect te annuleren:

  • Voor asynchrone taken, gebruik DispatchWorkItem, dat de methode cancel() ondersteunt. De taak zelf moet periodiek de eigenschap isCancelled controleren en correct beëindigen als een annulering wordt aangevraagd.

Voorbeeld:

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

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

// Later
workItem.cancel()

Dus, annulering is alleen mogelijk als de taak de controle op annulering ondersteunt, anders kan deze niet geforceerd worden afgebroken.