Sobes.tech
Junior — Middle

Kas GCD-s ülesande täitmise katkestamine enne selle lõpetamist võimalik?

sobes.tech AI

Vastus AI-lt

GCD (Grand Central Dispatch) süsteemis ei ole võimalik otse katkestada juba käivitunud ülesannet. Tööde järjekorda saadetud ülesanded täidetakse kuni lõpuni.

Kuid, ülesande tühistamine on võimalik kaudselt:

  • Asünkroonsete ülesannete jaoks kasutage DispatchWorkItem, mis toetab meetodit cancel(). Oma ülesanne peaks regulaarselt kontrollima isCancelled omadust ja õigesti lõpetama, kui tühistamine on nõutud.

Näide:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Ülesanne tühistatud")
            return
        }
        // Töö tegemine
    }
}

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

// Hiljem
workItem.cancel()

Seega, tühistamine on võimalik ainult juhul, kui ülesanne toetab tühistamise kontrolli, vastasel juhul ei ole seda võimalik sunniviisiliselt katkestada.