Swift Academy · Lekcja

async let, Task i anulowanie

Uruchamiaj pracę równolegle za pomocą async let , twórz niezależne zadania Task i obsługuj anulowanie w sposób kooperacyjny.

Lekcja 2 z 38 kroki

async let, Task i anulowanie to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 3 lekcji w sumie.

Zakres lekcji

W tej lekcji:

  • Uruchomisz pracę zadań siostrzanych za pomocą async let
  • Uruchomisz niezależne jednostki za pomocą Task { }
  • Zareagujesz na anulowanie za pomocą kooperatywnych kontroli

Podstawy async let

async let uruchamia równolegle zadania podrzędne w tym samym zakresie; przed opuszczeniem zakresu musisz użyć await.

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
}

Niezależny Task

Użyj Task {}, aby uruchomić niezależne zadanie, a następnie użyj await t.value, aby pobrać jego wynik.

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

Podstawy anulowania

Anulowanie ma charakter kooperatywny. Sprawdzaj je za pomocą Task.checkCancellation() (rzuca błąd) albo odczytuj Task.isCancelled i kończ działanie wcześniej.

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

Anulowanie zadań podrzędnych przez nadrzędne

Gdy zadanie nadrzędne zostanie anulowane, zadania podrzędne wykrywają ten stan i po sprawdzeniu powinny szybko zakończyć działanie.

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

Wskazówki

Wskazówki:

  • Używaj async let do zadań siostrzanych; zawsze oczekuj na nie w tym samym zakresie.
  • Anuluj zadania za pomocą task.cancel(), a wewnątrz pracy wywołuj Task.checkCancellation().
  • Preferuj małe funkcje asynchroniczne: łatwiej je anulować i testować.

Działanie kooperatywnego anulowania

Szybkie sprawdzenie: Jak długotrwały kod asynchroniczny powinien reagować na anulowanie?

Podsumowanie

Podsumowanie: Uruchamiaj zadania siostrzane za pomocą async let, niezależną pracę uruchamiaj w Task {}, a kooperatywne anulowanie implementuj przez sprawdzanie stanu i szybkie kończenie działania.

Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „async let, Task i anulowanie” jest bezpłatna?

Tak — pełny tekst „async let, Task i anulowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „async let, Task i anulowanie”?

Uruchamiaj pracę równolegle za pomocą async let , twórz niezależne zadania Task i obsługuj anulowanie w sposób kooperacyjny. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „async let, Task i anulowanie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Współbieżność strukturalna i funkcje asynchroniczne
  2. async let, Task i anulowanie
  3. try await i propagacja błędów
← Powrót do Swift Academy