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.
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łujTask.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.
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
- Współbieżność strukturalna i funkcje asynchroniczne
- async let, Task i anulowanie
- try await i propagacja błędów