typestar

select! y timeouts en Rust

select! toma el primer futuro que termine — la forma de todo timeout.

use tokio::time::{sleep, timeout, Duration};

async fn slow() -> &'static str {
    sleep(Duration::from_millis(200)).await;
    "slow finished"
}

#[tokio::main]
async fn main() {
    tokio::select! {
        result = slow() => println!("{result}"),
        _ = sleep(Duration::from_millis(50)) => println!("gave up first"),
    }

    match timeout(Duration::from_millis(50), slow()).await {
        Ok(value) => println!("{value}"),
        Err(_) => println!("timed out"),
    }
}

Cómo funciona

  1. Cada rama es un futuro y el código a correr cuando gana.
  2. Los futuros perdedores se sueltan, y eso los cancela.
  3. timeout envuelve la misma idea en una sola llamada.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
428
Tokens
135
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 74 segundos.

Escribe este fragmento

Paso 4 de 6 en Async con tokio; paso 12 de 15 en Concurrencia y async.

← Anterior Siguiente →