Pular para o conteúdo

23 · Concorrência

Produza uma sequência assíncrona

Uma async fn* produz valores com yield e pode aguardar entre eles. Ela retorna AsyncIter<T>, consumido com for await. Cada pedido avança o produtor; fechar a sequência ou sair do loop cancela o produtor e executa sua limpeza.

Nesta página

Uma async fn* produz valores com yield e pode aguardar entre eles. Ela retorna AsyncIter<T>, consumido com for await. Cada pedido avança o produtor; fechar a sequência ou sair do loop cancela o produtor e executa sua limpeza.

Exemplo completo

Execute este exemplo localmente com a CLI instalada e o scheduler do host.

Produza uma sequência assíncrona.

02-async-generators.zolo
Playground
// Fetching pages is driven by the consumer. Breaking closes the producer.

let mut fetched = 0
let mut closed = 0

async fn fetch_page(id: int) -> int {
    sleep 1ms
    fetched += 1
    id * 10
}

async fn* pages(ids: [int]) -> int {
    defer { closed += 1 }
    for id in ids {
        yield await fetch_page(id)
    }
}

let source: AsyncIter<int> = pages([1, 2, 3])
assert(fetched == 0)
let mut total = 0
let mut count = 0
for await page in source {
    total += page
    count += 1
    if count == 2 { break }
}
assert(total == 30)
assert(fetched == 2)
assert(closed == 1)
print("pages: {count}, total: {total}, closed: {closed}")

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Referência

Referência · Programa fonte

zolo run examples/features/75-syntax-four-async/02-async-generators.zolo --no-cache

Veja também

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br