Saltar al contenido

23 · Concurrencia

Lectura de una fuente asíncrona

`for await` pide un valor a la vez a la fuente y espera a `next()` antes de ejecutar el cuerpo del bucle.

En esta página

for await pide un valor a la vez a la fuente y espera a next() antes de ejecutar el cuerpo del bucle. Nil termina la iteración. El método conocido next() debe devolver Future<T?> o Task<T?>, y la fuente debe implementar core::cleanup::Cleanup. El ejemplo consume una fuente completa e interrumpe otra antes del final; ambas se cierran.

Lectura de una fuente así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)

La fuente se adquiere una vez y se cierra al terminar, interrumpir, devolver, fallar o recibir cancelación cooperativa. Los patrones, incluido for await case, examinan el valor esperado. Los arrays síncronos no se convierten en fuentes asíncronas. Ejecute con la CLI; wasm-aot rechaza explícitamente las operaciones del planificador.

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br