Sobes.tech
Junior — Middle

Lehet-e megszakítani egy feladat végrehajtását a GCD-ben annak befejezése előtt?

sobes.tech MI

Válasz az MI-től

A GCD (Grand Central Dispatch) nem teszi lehetővé egy már elindított feladat közvetlen megszakítását. A sorba küldött feladatok a befejezésükig végrehajtódnak.

Azonban lehetőség van a feladat közvetett törlésére:

  • Aszinkron feladatok esetén használja a DispatchWorkItem-t, amely támogatja a cancel() metódust. A feladatnak rendszeresen ellenőriznie kell az isCancelled tulajdonságot, és helyesen kell befejeződnie, ha a törlés kérésre kerül.

Példa:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Feladat törölve")
            return
        }
        // Munka végrehajtása
    }
}

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

// Később
workItem.cancel()

Így a törlés csak akkor lehetséges, ha a feladat támogatja a törlés ellenőrzését, különben nem lehet kényszeríteni a megszakítását.