Junior — Middle
Lehetséges megszakítani a GCD-n keresztül indított feladat végrehajtását annak végrehajtása közben?
sobes.tech MI
Válasz az MI-től
A GCD (Grand Central Dispatch) nem rendelkezik beépített mechanizmussal a már futó feladat kényszerített leállítására. Miután egy feladat (blokk) elkezd futni, külsőleg nem lehet megszakítani.
A megszakítás lehetőségének megvalósításához saját magának kell ellenőriznie egy törlő zászlót a feladat belsejében. Például, használjon atomikus változót vagy olyan zászlót, amelyet rendszeresen ellenőriznek a feladat végrehajtása során, és szükség esetén korán befejezi a munkát.
Példa:
var isCancelled = false
dispatchQueue.async {
for i in 0..<1000 {
if isCancelled {
print("Feladat törölve")
break
}
// A munka egy részének végrehajtása
}
}
// Más helyen
isCancelled = true
Ha rugalmasabb törlést szeretne, fontolja meg az Operation és az OperationQueue használatát, amelyek beépített támogatást nyújtanak a műveletek törléséhez.