Millised meetodid on olemas ülesannete paigutamiseks Grand Central Dispatch (GCD) järjekorda?
sobes.tech AI
Vastus AI-lt
Siin on järgmised viisid, kuidas paigutada ülesandeid GCD järjekorda:
-
Asünkroonne täitmine (async): Ülesanne lisatakse järjekorda ja täitmine jätkub kohe praegusel lõngal, oodates ülesande lõpetamist järjekorras.
DispatchQueue.global().async { // Ülesande kood } -
Sünkroonne täitmine (sync): Ülesanne lisatakse järjekorda ja praegune lõng blokeeritakse kuni ülesande lõpetamiseni. Vältige sync kasutamist peamisel lõngal pikaajaliste ülesannete jaoks, et mitte blokeerida UI-d.
DispatchQueue.global().sync { // Ülesande kood, praegune lõng ootab } -
Viivitusega täitmine (asyncAfter): Ülesanne lisatakse järjekorda määratud viivitusega. Täitmine algab mitte varem kui määratud aeg.
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // Ülesanne täidetakse 2 sekundi pärast } -
Rühmas täitmine (DispatchGroup): Ülesandeid saab lisada DispatchGroup-i, et nende lõpetamist sünkroniseerida. Võite oodata, kuni kõik on lõpetatud, või saada teate (notify) pärast nende lõpetamist.
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Ülesanne 1 group.leave() } group.enter() DispatchQueue.global().async { // Ülesanne 2 group.leave() } group.notify(queue: .main) { // Kõik ülesanded grupis on lõpetatud } -
Korduste kasutamine (concurrentPerform): Võimaldab täita määratud koodiploki
iterationskorda paralleelselt konkurentsijärjekorras.DispatchQueue.concurrentPerform(iterations: 100) { index in // Kood, mis täidetakse iga indeksi jaoks paralleelselt } -
DispatchWorkItem: Pakib koodiploki ja võimaldab tühistada ülesande enne selle algust või pärast selle järjekorda lisamist, kui see pole veel alanud.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Ülesande kood } DispatchQueue.global().async(execute: workItem!) // Võite tühistada ülesande, kui see pole veel alanud // workItem?.cancel()