0Pricing
Swift Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทำงานพร้อมกันแบบมีโครงสร้างและฟังก์ชัน async
  2. async let, Task และการยกเลิก
  3. try await และการส่งต่อข้อผิดพลาด
← กลับไปที่ Swift Academy