Grand Central Dispatch (GCD) növbəsinə tapşırıqları yerləşdirmək üçün hansı üsullar mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
GCD növbəsinə tapşırıqları yerləşdirməyin aşağıdakı üsulları mövcuddur:
-
Asinxron icra (async): Tapşırıq növbəyə əlavə olunur və icra dərhal cari axında davam edir, növbədəki tapşırığın tamamlanmasını gözləmədən.
DispatchQueue.global().async { // Tapşırıq kodu } -
Sinxron icra (sync): Tapşırıq növbəyə əlavə olunur və cari axın bloklanır, tapşırıq tamamlanana qədər. Uzun müddətli tapşırıqlar üçün sync istifadə etməyin, UI-nin bloklanmaması üçün.
DispatchQueue.global().sync { // Tapşırıq kodu, cari axın gözləyəcək } -
Gecikdirilmiş icra (asyncAfter): Tapşırıq göstərilən gecikmə ilə növbəyə əlavə olunur. İcra göstərilən vaxtdan əvvəl başlamayacaq.
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // Tapşırıq kodu 2 saniyə sonra icra olunacaq } -
Qrupda icra (DispatchGroup): Tapşırıqlar DispatchGroup-a əlavə oluna bilər, onların tamamlanmasını sinxronlaşdırmaq üçün. Hamısının tamamlanmasını gözləyə və ya tamamlandıqdan sonra bildiriş ala bilərsiniz (notify).
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Tapşırıq 1 group.leave() } group.enter() DispatchQueue.global().async { // Tapşırıq 2 group.leave() } group.notify(queue: .main) { // Bütün tapşırıqlar tamamlandı } -
İterasiya ilə icra (concurrentPerform): Kod blokunu
iterationsdəfə paralel icra etməyə imkan verir.DispatchQueue.concurrentPerform(iterations: 100) { index in // Hər indeks üçün paralel icra olunan kod } -
DispatchWorkItem: Kod blokunu əhatə edir və tapşırığı başlamadan və ya əlavə etdikdən sonra, əgər hələ başlamayıbsa, ləğv etməyə imkan verir.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Tapşırıq kodu } DispatchQueue.global().async(execute: workItem!) // Əgər hələ başlamayıbsa, tapşırığı ləğv etmək olar // workItem?.cancel()