Grand Central Dispatch (GCD) navbatiga vazifalarni joylashtirish uchun qanday usullar mavjud?
sobes.tech AI
AIdan javob
GCD navbatiga vazifalarni joylashtirishning quyidagi usullari mavjud:
-
Asinxron bajarish (async): Vazifa navbatga qo'shiladi va bajarish darhol joriy oqimda davom etadi, navbatdagi vazifa tugashini kutmay.
DispatchQueue.global().async { // Vazifa kodi } -
Sinkron bajarish (sync): Vazifa navbatga qo'shiladi va joriy oqim bloklanadi, vazifa tugaguniga qadar. Uzoq davom etadigan vazifalar uchun sync ni asosiy oqimda ishlatmang, UI ni bloklamaslik uchun.
DispatchQueue.global().sync { // Vazifa kodi, joriy oqim kutadi } -
Keçirilgan bajarish (asyncAfter): Vazifa belgilangan kechikish bilan navbatga qo'shiladi. Bajarish belgilangan vaqtdan kechiktirilmay boshlanadi.
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // Vazifa kodi 2 soniya ichida bajariladi } -
Guruhda bajarish (DispatchGroup): Vazifalar DispatchGroup ga qo'shilishi mumkin, ularning yakunlanishini sinxronlashtirish uchun. Barcha tugashini kutish yoki tugagach xabar olish mumkin (notify).
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Vazifa 1 group.leave() } group.enter() DispatchQueue.global().async { // Vazifa 2 group.leave() } group.notify(queue: .main) { // Barcha vazifalar tugadi } -
Iteratsiyalarni bajarish (concurrentPerform): Kod blokini
iterationsmarta parallel ravishda bajarishga imkon beradi.DispatchQueue.concurrentPerform(iterations: 100) { index in // Har bir indeks uchun parallel bajariladigan kod } -
DispatchWorkItem: Kod blokini o'z ichiga oladi va vazifani boshlashdan oldin yoki qo'shilgandan keyin, agar hali boshlanmagan bo'lsa, bekor qilish imkonini beradi.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Vazifa kodi } DispatchQueue.global().async(execute: workItem!) // Vazifa hali boshlanmagan bo'lsa, bekor qilish mumkin // workItem?.cancel()