Saltar al contenido

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
Playground
// 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

Referencia · Programa fuente

zolo run examples/features/75-syntax-four-async/04-async-cleanup.zolo --no-cache

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br