Saltar al contenido

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

Referencia · Programa fuente

zolo run examples/features/75-syntax-four-async/03-deadline-fallback.zolo --no-cache

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br