async let, Task และการยกเลิก
เรียกใช้งานแบบขนานด้วย async let สร้าง Task ที่ทำงานเป็นอิสระ และจัดการ การยกเลิก แบบร่วมมือกัน
async let, Task และการยกเลิก เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
สิ่งที่จะครอบคลุม
คุณจะได้:
- เริ่มงานพี่น้องด้วย การประกาศงานแบบไม่พร้อมกัน
- เปิดใช้งานหน่วยงานที่เป็นอิสระผ่าน งาน { }
- ตอบสนองต่อ การยกเลิก โดยใช้ การตรวจสอบแบบร่วมมือกัน
พื้นฐานการประกาศงานแบบไม่พร้อมกัน
การประกาศงานแบบไม่พร้อมกันจะเริ่มงานลูกแบบขนานภายในขอบเขตเดียวกัน คุณต้อง รอผลก่อนออกจากขอบเขต
func loadA() async -> Int { try? await Task.sleep(nanoseconds: 200_000_000); return 1 }
func loadB() async -> Int { try? await Task.sleep(nanoseconds: 200_000_000); return 2 }
Task {
async let a = loadA()
async let b = loadB()
// Both start immediately; awaiting joins them
let sum = await (a + b)
print("sum =", sum) // 3
}งานอิสระ
ใช้ งาน {} เพื่อเปิดใช้งานงานอิสระ แล้วใช้ await t.value ในภายหลังเพื่อรับผลลัพธ์
// Create an independent task (not tied to current scope)
func fetchMessage() async -> String {
try? await Task.sleep(nanoseconds: 150_000_000)
return "hello"
}
let t = Task { await fetchMessage() }
Task {
print("from Task:", await t.value) // waits for the independent task's result
}พื้นฐานการยกเลิก
การยกเลิกเป็นการทำงานแบบ ร่วมมือกัน ตรวจสอบด้วย Task.checkCancellation() (ซึ่งจะโยนข้อผิดพลาด) หรืออ่านค่า Task.isCancelled แล้วคืนค่าก่อนกำหนด
// A long-running job that checks for cancellation
enum WorkError: Error { case cancelled }
func longJob() async throws -> Int {
var total = 0
for i in 1...10 {
try Task.checkCancellation() // throws CancellationError if cancelled
try? await Task.sleep(nanoseconds: 50_000_000)
total += i
}
return total
}
let job = Task { try await longJob() }
Task {
// Cancel after a short delay
try? await Task.sleep(nanoseconds: 120_000_000)
job.cancel()
do {
_ = try await job.value
} catch {
print("job cancelled") // expected
}
}งานแม่ → ยกเลิกงานลูก
เมื่อมีการยกเลิกงาน แม่ งาน ลูก จะสังเกตเห็นและควรออกจากการทำงานอย่างรวดเร็วหลังการตรวจสอบ
// Propagate cancellation from parent to children using async let
func part(_ id: Int) async throws -> String {
try Task.checkCancellation()
try? await Task.sleep(nanoseconds: 80_000_000)
return "P\(id)"
}
Task {
do {
async let p1 = part(1)
async let p2 = part(2)
// Cancel the whole operation before awaiting
Task.currentTask?.cancel() // cancel self -> children see cancellation
let out = try await [p1, p2].joined(separator: ",")
print(out)
} catch {
print("parent cancelled; children stopped")
}
}แนวทาง
เคล็ดลับ:
- ใช้ การประกาศงานแบบไม่พร้อมกันสำหรับงานพี่น้อง และรอผลในขอบเขตเดียวกันเสมอ
- ยกเลิกด้วย
task.cancel()และภายในงานให้เรียกTask.checkCancellation() - ควรใช้ฟังก์ชันแบบไม่พร้อมกันขนาดเล็ก เพราะยกเลิกและทดสอบได้ง่าย
พฤติกรรมการยกเลิกแบบร่วมมือกัน
ตรวจสอบอย่างรวดเร็ว: โค้ดแบบไม่พร้อมกันที่ทำงานนานควรตอบสนองต่อการยกเลิกอย่างไร
สรุปทบทวน
สรุปทบทวน: เริ่มงานพี่น้องด้วย การประกาศงานแบบไม่พร้อมกัน เปิดใช้งานงานอิสระด้วย งาน {} และใช้ การยกเลิกแบบร่วมมือกันโดยตรวจสอบแล้วออกจากการทำงานอย่างรวดเร็ว
คำถามที่พบบ่อย
บทเรียน “async let, Task และการยกเลิก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “async let, Task และการยกเลิก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “async let, Task และการยกเลิก”
เรียกใช้งานแบบขนานด้วย async let สร้าง Task ที่ทำงานเป็นอิสระ และจัดการ การยกเลิก แบบร่วมมือกัน คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน
บทเรียน “async let, Task และการยกเลิก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำงานพร้อมกันแบบมีโครงสร้างและฟังก์ชัน async
- async let, Task และการยกเลิก
- try await และการส่งต่อข้อผิดพลาด