0Pricing
Swift Academy · Aula

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, chame Task.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

  1. Concorrência estruturada, funções assíncronas
  2. async let, Task e cancelamento
  3. try await e propagação de erros
← Voltar para Swift Academy