23 · Concurrencia
Espera la limpieza del recurso
using async session = await open_session() instala un recurso que implementa core::cleanup::AsyncCleanup. La salida del alcance espera close, incluso con retornos anticipados. Los recursos anidados se cierran en el orden inverso de adquisición, una sola vez.
En esta página
using async session = await open_session() instala un recurso que implementa core::cleanup::AsyncCleanup. La salida del alcance espera close, incluso con retornos anticipados. Los recursos anidados se cierran en el orden inverso de adquisición, una sola vez.
Ejemplo completo
Ejecuta este ejemplo localmente con la CLI instalada y el scheduler del host.
Espera la limpieza del recurso.
04-async-cleanup.zolo
// Returning from the inner scope still waits for both sessions to close.
use core::cleanup::AsyncCleanup
let mut close_order = 0
struct Session { id: int }
impl AsyncCleanup for Session {
async fn close(self) {
sleep 1ms
close_order = close_order * 10 + self.id
}
}
async fn open_session(id: int) -> Session = Session { id: id }
async fn send_batch() -> int {
using async outer = await open_session(1) {
using async inner = await open_session(2) {
return 7
}
}
}
let sent = await send_batch()
assert(sent == 7)
assert(close_order == 21)
print("sent: {sent}, close order: {close_order}")
Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.
Referencia
zolo run examples/features/75-syntax-four-async/04-async-cleanup.zolo --no-cache
Consulta también