async let, Task e cancelamento
Execute trabalho em paralelo com async let , crie Task s independentes e trate o cancelamento de forma cooperativa.
async let, Task e cancelamento é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 3 aulas no total.
O que será abordado
Você vai:
- Iniciar trabalhos irmãos com async let
- Iniciar unidades independentes usando Task { }
- Responder ao cancelamento usando verificações cooperativas
Noções básicas de async let
async let inicia tarefas filhas em paralelo dentro do mesmo escopo; você deve usar await antes de sair do escopo.
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
}Tarefa independente
Use Task {} para iniciar uma tarefa independente e, mais tarde, await t.value para obter o resultado.
// 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
}Noções básicas de cancelamento
O cancelamento é cooperativo. Verifique com Task.checkCancellation() (que lança um erro) ou leia Task.isCancelled e retorne mais cedo.
// 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
}
}Cancelamento do pai → filhas
Quando a tarefa pai é cancelada, as tarefas filhas percebem isso e devem sair rapidamente após uma verificação.
// 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")
}
}Diretrizes
Dicas:
- Use async let para tarefas irmãs; sempre use await nelas dentro do mesmo escopo.
- Cancele com
task.cancel()e, dentro do trabalho, chameTask.checkCancellation(). - Prefira funções assíncronas pequenas: são fáceis de cancelar e testar.
Comportamento do cancelamento cooperativo
Verificação rápida: como um código assíncrono de longa duração deve reagir ao cancelamento?
Recapitulação
Recapitulação: inicie tarefas irmãs com async let, inicie trabalhos independentes em Task {} e implemente o cancelamento cooperativo verificando o cancelamento e saindo prontamente.
Perguntas Frequentes
A aula “async let, Task e cancelamento” é grátis?
Sim — o texto completo de “async let, Task e cancelamento” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 3 aulas no total.
O que vou aprender em “async let, Task e cancelamento”?
Execute trabalho em paralelo com async let , crie Task s independentes e trate o cancelamento de forma cooperativa. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 3.
Quanto tempo leva a aula “async let, Task e cancelamento”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Concorrência estruturada, funções assíncronas
- async let, Task e cancelamento
- try await e propagação de erros