Swift Academy · Lektion

async let, Task och avbrytning

Kör arbete parallellt med async let , skapa fristående Task s och hantera cancellation kooperativt.

Lektion 2 av 38 steg

async let, Task och avbrytning är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 av 3. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 3 lektioner.

Det här går vi igenom

Du kommer att:

  • Starta parallellt arbete med async let
  • Starta oberoende enheter med Task { }
  • Reagera på avbrytning med kooperativa kontroller

Grunderna i async let

async let startar underordnade tasks parallellt inom samma scope; du måste använda await innan scopet lämnas.

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
}

Oberoende Task

Använd Task {} för att starta en oberoende task och hämta resultatet senare med 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
}

Grunderna i avbrytning

Avbrytning är kooperativ. Kontrollera med Task.checkCancellation(), som kastar ett fel, eller läs Task.isCancelled och avsluta tidigt.

// 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
    }
}

Förälder → barn avbryts

När den överordnade tasken avbryts observerar de underordnade taskerna det och bör avslutas snabbt efter en kontroll.

// 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")
    }
}

Riktlinjer

Tips:

  • Använd async let för parallella tasks; använd alltid await för dem i samma scope.
  • Avbryt med task.cancel() och anropa Task.checkCancellation() inuti arbetet.
  • Föredra små async-funktioner: de är enkla att avbryta och testa.

Beteende vid kooperativ avbrytning

Snabb kontroll: Hur bör långvarig asynkron kod reagera på avbrytning?

Sammanfattning

Sammanfattning: Starta parallella tasks med async let, starta oberoende arbete i Task {} och implementera kooperativ avbrytning genom att kontrollera och avsluta snabbt.

Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”async let, Task och avbrytning” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”async let, Task och avbrytning”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”async let, Task och avbrytning”?

Kör arbete parallellt med async let , skapa fristående Task s och hantera cancellation kooperativt. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 3.

Hur lång tid tar lektionen ”async let, Task och avbrytning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Strukturerad samtidighet och async-funktioner
  2. async let, Task och avbrytning
  3. try await och felpropagering
← Tillbaka till Swift Academy