Sobes.tech
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.