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.