Pular para o conteúdo

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
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}")

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/03-deadline-fallback.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