23 · Concurrencia
Usa un fallback al vencer el plazo
await fetch() within 2s else cached elige cached solo cuando vence el plazo. El fallback se evalúa después de completar la cancelación y la limpieza. Un error Result de la propia tarea sigue formando parte del valor devuelto.
En esta página
await fetch() within 2s else cached elige cached solo cuando vence el plazo. El fallback se evalúa después de completar la cancelación y la limpieza. Un error Result de la propia tarea sigue formando parte del valor devuelto.
Ejemplo completo
Ejecuta este ejemplo localmente con la CLI instalada y el scheduler del host.
Usa un fallback al vencer el plazo.
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}")
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/03-deadline-fallback.zolo --no-cache
Consulta también