Grand Central Dispatch (GCD) kuyruğuna görevleri yerleştirmek için hangi yöntemler vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
GCD kuyruğuna görev yerleştirmenin aşağıdaki yolları vardır:
-
Asenkron yürütme (async): Görev kuyruğa eklenir ve yürütme, kuyruğun tamamlanmasını beklemeden mevcut akışta hemen devam eder.
DispatchQueue.global().async { // Görev kodu } -
Senkron yürütme (sync): Görev kuyruğa eklenir ve mevcut akış, görev tamamlanana kadar engellenir. Uzun süren görevler için ana akışta sync kullanmaktan kaçının, UI'yi engellememek için.
DispatchQueue.global().sync { // Görev kodu, mevcut akış bekleyecek } -
İleri tarihli yürütme (asyncAfter): Görev, belirtilen gecikmeyle kuyruğa eklenir. Yürütme, belirtilen zamandan önce başlamaz.
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // Görev kodu 2 saniye sonra çalışacak } -
Grup içinde yürütme (DispatchGroup): Görevler, tamamlanmalarını senkronize etmek için DispatchGroup'a eklenebilir. Tümünün tamamlanmasını bekleyebilir veya tamamlandıktan sonra bildirim alabilirsiniz (notify).
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Görev 1 group.leave() } group.enter() DispatchQueue.global().async { // Görev 2 group.leave() } group.notify(queue: .main) { // Tüm görevler tamamlandı } -
Yineleme yürütme (concurrentPerform): Belirtilen kod bloğunu
iterationskez paralel olarak yürütür.DispatchQueue.concurrentPerform(iterations: 100) { index in // Paralel olarak her indeks için yürütülen kod } -
DispatchWorkItem: Bir kod bloğunu sarmalar ve görevi başlamadan veya kuyruğa ekledikten sonra iptal etmeye imkan tanır, eğer henüz başlamadıysa.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Görev kodu } DispatchQueue.global().async(execute: workItem!) // Görev henüz başlamadıysa iptal edilebilir // workItem?.cancel()