Pular para o conteúdo

23 · Concorrência

Lendo uma fonte assíncrona

`for await` pede um valor por vez à fonte e aguarda `next()` antes de executar o corpo do laço.

Nesta página

for await pede um valor por vez à fonte e aguarda next() antes de executar o corpo do laço. Nil encerra a iteração. O método conhecido next() deve retornar Future<T?> ou Task<T?>, e a fonte deve implementar core::cleanup::Cleanup. O exemplo consome uma fonte inteira e interrompe outra antes do fim; ambas são fechadas.

Lendo uma fonte assíncrona.

16-async-iteration.zolo
Playground
use core::cleanup::Cleanup
struct Events { remaining: int }
impl Events {
    async fn next(self) -> int? {
        if self.remaining <= 0 { return nil }
        let value = self.remaining
        self.remaining -= 1
        return value
    }
}
impl Cleanup for Events {
    fn close(self) { print("closed") }
}
let complete = Events { remaining: 3 }
var sum = 0
for await value in complete { sum += value }
assert_eq(sum, 6)
let early = Events { remaining: 5 }
:events for await value in early {
    if value == 4 { break :events }
    print(value)
}
print(sum)

A fonte é adquirida uma vez e fechada ao terminar, interromper, retornar, falhar ou receber cancelamento cooperativo. Padrões, inclusive for await case, examinam o valor aguardado. Arrays síncronos não se tornam fontes assíncronas. Execute com a CLI; wasm-aot rejeita operações do escalonador explicitamente.

Veja também

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br