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.
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