Sobes.tech
Junior — Middle

Se poate întrerupe executarea unei sarcini în GCD înainte de finalizare?

sobes.tech AI

Răspuns de la AI

În GCD (Grand Central Dispatch), nu se poate întrerupe direct executarea unei sarcini deja pornite. Sarcinile trimise în coadă se execută până la finalizare.

Totuși, se poate implementa anularea sarcinii indirect:

  • Pentru sarcinile asincrone, folosiți DispatchWorkItem, care suportă metoda cancel(). Sarcina trebuie să verifice periodic proprietatea isCancelled și să se încheie corect dacă se solicită anularea.

Exemplu:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Sarcină anulată")
            return
        }
        // Executarea muncii
    }
}

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

// Mai târziu
workItem.cancel()

Prin urmare, anularea este posibilă numai dacă sarcina suportă verificarea anulării, altfel nu se poate întrerupe forțat.