Kādi veidi pastāv, lai izvietotu uzdevumus Grand Central Dispatch (GCD) rindā?
sobes.tech AI
Atbilde no AI
Šeit ir sekojo veidi, kā izvietot uzdevumus GCD rindā:
-
Asinhroniska izpilde (async): Uzdevums tiek pievienots rindai, un izpilde nekavējoties turpinās pašreizējā pavedienā, negaidot uzdevuma pabeigšanu rindā.
DispatchQueue.global().async { // Uzdevuma kods } -
Sinhroniska izpilde (sync): Uzdevums tiek pievienots rindai, un pašreizējais pavedienis tiek bloķēts, līdz uzdevums rindā tiks pabeigts. Izvairieties no sync lietošanas galvenajā pavedienā ilgstošiem uzdevumiem, lai nesalocītu UI.
DispatchQueue.global().sync { // Uzdevuma kods, pašreizējais pavedienis gaidīs } -
Aizkavēta izpilde (asyncAfter): Uzdevums tiek pievienots rindai ar norādītu aizkavi. Izpilde sāksies ne agrāk kā norādītajā laikā.
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // Uzdevums tiks izpildīts pēc 2 sekundēm } -
Vērtēšana grupā (DispatchGroup): Uzdevumi var tikt pievienoti DispatchGroup, lai sinhronizētu to pabeigšanu. Var gaidīt, kamēr visi pabeigs vai saņemt paziņojumu (notify) pēc to pabeigšanas.
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Uzdevums 1 group.leave() } group.enter() DispatchQueue.global().async { // Uzdevums 2 group.leave() } group.notify(queue: .main) { // Visi uzdevumi grupā ir pabeigti } -
Vērtēšanas atkārtošana (concurrentPerform): Ļauj izpildīt norādīto koda bloku
iterationsreizes paralēli konkurējošā rindā.DispatchQueue.concurrentPerform(iterations: 100) { index in // Kods, kas tiek izpildīts katram indeksam paralēli } -
DispatchWorkItem: Ietver koda bloku un ļauj atcelt uzdevumu pirms tā sākšanas vai pēc tā pievienošanas rindai, ja tas vēl nav sācies.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Uzdevuma kods } DispatchQueue.global().async(execute: workItem!) // Var atcelt uzdevumu, ja tas vēl nav sācies // workItem?.cancel()