0Pricing
Swift Academy · Ders

Paralellik için TaskGroup

Paralel alt görevleri çalıştırmak için withTaskGroup kullanın, sonuçları geldikçe yineleyin ve hataları hata fırlatan varyantla yönetin.

Paralellik için TaskGroup, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 3 dersten oluşur.

TaskGroup neden kullanılır?

TaskGroup, birçok alt görevi paralel olarak başlatır ve sonuçları güvenli biçimde toplar. Grup ancak tüm alt görevler tamamlandığında biter.

  • group.addTask ile başlatın
  • for await ile tüketin
  • Hataları üst katmana aktarmak için hata fırlatan varyantı kullanın

Başlatma ve toplama

Alt görevleri addTask ile başlatın ve sonuçlar geldikçe for await kullanarak yineleyin.

func work(_ n: Int) async -> Int {
    try? await Task.sleep(nanoseconds: UInt64(50_000_000 * n)) // simulate delay
    return n * n
}

Task {
    let result = await withTaskGroup(of: Int.self) { group in
        for i in 1...4 {
            group.addTask { await work(i) }   // spawn child
        }
        var sum = 0
        for await value in group {            // values as they finish
            sum += value
        }
        return sum
    }
    print("sum =", result) // 1^2+2^2+3^2+4^2 = 30
}

Sonuçları birleştirme

Bir grup, sonuçlardan oluşan bir eşzamansız dizidir; tek bir dönüş değeri oluşturmak için reduce kullanın veya bir döngü kurun.

func sumSquares(_ n: Int) async -> Int {
    await withTaskGroup(of: Int.self) { group in
        (1...n).forEach { i in
            group.addTask { await work(i) }
        }
        return await group.reduce(0, +)   // reduce over async sequence
    }
}

Task {
    print(await sumSquares(5)) // 55
}

Hata fırlatan gruplar

İlk hatayı üst katmana aktarmak için withThrowingTaskGroup kullanın; boşa harcanan işi durdurmak için kalan alt görevleri iptal edin.

enum CalcError: Error { case boom(Int) }

func risky(_ i: Int) async throws -> Int {
    try await Task.sleep(nanoseconds: 30_000_000)
    if i == 3 { throw CalcError.boom(i) }
    return i
}

Task {
    do {
        let total = try await withThrowingTaskGroup(of: Int.self) { group in
            for i in 1...5 { group.addTask { try await risky(i) } }
            var sum = 0
            do {
                for try await v in group { sum += v }
                return sum
            } catch {
                // Cancel remaining children on error
                group.cancelAll()
                throw error
            }
        }
        print("total:", total)
    } catch {
        print("failed:", error) // boom(3)
    }
}

Alt görevleri iptal etme

İptal isteğinde bulunmak için group.cancelAll() çağırın. Alt görevler Task.isCancelled (veya Task.checkCancellation()) değerini denetleyip hızla çıkmalıdır.

func slow(_ i: Int) async -> Int {
    for _ in 0..<5 {
        if Task.isCancelled { return -1 } // observe cancellation cooperatively
        try? await Task.sleep(nanoseconds: 20_000_000)
    }
    return i * 10
}

Task {
    let value = await withTaskGroup(of: Int.self) { group in
        for i in 1...3 { group.addTask { await slow(i) } }
        // cancel quickly (e.g., user navigated away)
        group.cancelAll()
        // Still need to drain results; cancelled children should exit fast
        var out = 0
        for await v in group { out += v }
        return out
    }
    print("after cancel, collected:", value)
}

Yönergeler

İpuçları:

  • Alt görevlerin sayısı dinamik olduğunda görev gruplarını tercih edin.
  • Hızlı başarısızlık davranışı için hata fırlatan varyantı kullanın.
  • İptalden sonra bile grubu her zaman tamamen tüketin (sonuçlar üzerinde döngü kurun).
  • İptale hızlı yanıt verebilmeleri için alt görevleri küçük tutun.

Yapılandırılmış birleştirme semantiği

Hızlı kontrol: withTaskGroup neyi garanti eder?

Özet

Özet: Paralel işleri başlatmak ve sonuçları geldikçe yinelemek için withTaskGroup kullanın; hızlı başarısız olmak ve kalan işleri iptal etmek için hata fırlatan varyantı tercih edin.

Sıkça Sorulan Sorular

“Paralellik için TaskGroup” dersi ücretsiz mi?

Evet — “Paralellik için TaskGroup” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 3 dersten oluşur.

“Paralellik için TaskGroup” dersinde ne öğreneceğim?

Paralel alt görevleri çalıştırmak için withTaskGroup kullanın, sonuçları geldikçe yineleyin ve hataları hata fırlatan varyantla yönetin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 1. dersidir.

“Paralellik için TaskGroup” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Paralellik için TaskGroup
  2. Actor'ler, veri yalıtımı ve nonisolated
  3. Sendable ve iş parçacığı güvenliği denetimi
← Swift Academy Sayfasına Dön