Pular para o conteúdo

23 · Concorrência

Aguarde a limpeza do recurso

using async session = await open_session() instala um recurso que implementa core::cleanup::AsyncCleanup. A saída do escopo aguarda close, inclusive em retornos antecipados. Recursos aninhados fecham na ordem inversa de aquisição, uma única vez.

Nesta página

using async session = await open_session() instala um recurso que implementa core::cleanup::AsyncCleanup. A saída do escopo aguarda close, inclusive em retornos antecipados. Recursos aninhados fecham na ordem inversa de aquisição, uma única vez.

Exemplo completo

Execute este exemplo localmente com a CLI instalada e o scheduler do host.

Aguarde a limpeza do 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}")

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Referência

Referência · Programa fonte

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

Veja também

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br