23 · Concorrência
Use um fallback quando o prazo acabar
await fetch() within 2s else cached escolhe cached apenas quando o prazo expira. O fallback executa depois de concluir o cancelamento e a limpeza. Um erro Result da própria tarefa continua fazendo parte do valor retornado.
Nesta página
await fetch() within 2s else cached escolhe cached apenas quando o prazo expira. O fallback executa depois de concluir o cancelamento e a limpeza. Um erro Result da própria tarefa continua fazendo parte do valor retornado.
Exemplo completo
Execute este exemplo localmente com a CLI instalada e o scheduler do host.
Use um fallback quando o prazo acabar.
03-deadline-fallback.zolo
// A cached answer is consulted only after the pending producer has drained.
let mut closed = 0
let mut cache_reads = 0
let mut started = false
async fn refresh() -> int {
defer { closed += 1 }
started = true
sleep 10ms
42
}
fn cached() -> int {
assert(closed == 1)
cache_reads += 1
7
}
let pending = refresh()
// Let the producer enter and register its defer before imposing the deadline.
async fn scheduler_turn() {}
await scheduler_turn()
assert(started)
let value = await pending within 1ns else cached()
assert(value == 7)
assert(cache_reads == 1)
async fn ready() -> int = 11
let fresh = await ready() within 1s else cached()
assert(fresh == 11)
assert(cache_reads == 1)
print("deadline fallback: {value}, fresh: {fresh}")
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
Referência
zolo run examples/features/75-syntax-four-async/03-deadline-fallback.zolo --no-cache
Veja também