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
// 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
zolo run examples/features/75-syntax-four-async/04-async-cleanup.zolo --no-cache
Veja também