TaskGroup untuk pemprosesan selari
Gunakan withTaskGroup untuk menjalankan tugas anak secara selari, lelar hasil apabila tiba, dan kendalikan kegagalan dengan varian yang boleh melontar.
TaskGroup untuk pemprosesan selari ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 3. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.
Mengapa TaskGroup?
TaskGroup melancarkan banyak tugas anak secara selari dan mengumpulkan hasil dengan selamat. Kumpulan itu hanya selesai apabila semua anak selesai.
- Hasilkan dengan group.addTask
- Gunakan dengan for await
- Gunakan varian yang melontarkan ralat untuk perambatan ralat
Hasilkan dan kumpulkan
Hasilkan anak dengan addTask dan ulangi hasil apabila hasil itu tiba menggunakan for await.
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
}Gabungkan hasil
Kumpulan ialah jujukan async hasil; gunakan reduce atau gelung untuk membina satu nilai pulangan.
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
}Kumpulan yang melontarkan ralat
Gunakan withThrowingTaskGroup untuk merambatkan ralat pertama; batalkan anak yang selebihnya untuk menghentikan kerja yang membazir.
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)
}
}Batalkan anak
Panggil group.cancelAll() untuk meminta pembatalan. Anak patut menyemak Task.isCancelled, atau Task.checkCancellation(), dan keluar dengan segera.
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)
}Garis panduan
Petua:
- Utamakan kumpulan tugas apabila bilangan anak berubah-ubah.
- Gunakan varian yang melontarkan ralat untuk tingkah laku gagal pantas.
- Sentiasa kosongkan kumpulan, iaitu ulangi hasil, walaupun selepas pembatalan.
- Pastikan tugas anak kecil supaya pembatalan dapat bertindak balas dengan pantas.
Semantik penyertaan berstruktur
Semakan ringkas: Apakah yang dijamin oleh withTaskGroup?
Imbas kembali
Imbas kembali: Gunakan withTaskGroup untuk menghasilkan kerja selari, mengulangi hasil apabila tiba, dan utamakan varian yang melontarkan ralat untuk gagal pantas serta membatalkan kerja yang selebihnya.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “TaskGroup untuk pemprosesan selari” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “TaskGroup untuk pemprosesan selari”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.
Apakah yang akan saya pelajari dalam “TaskGroup untuk pemprosesan selari”?
Gunakan withTaskGroup untuk menjalankan tugas anak secara selari, lelar hasil apabila tiba, dan kendalikan kegagalan dengan varian yang boleh melontar. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 3.
Berapa lamakah pelajaran “TaskGroup untuk pemprosesan selari” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- TaskGroup untuk pemprosesan selari
- Actor dan pengasingan data, nonisolated
- Sendable dan pemeriksaan keselamatan benang