typestar

Canales async en Rust

El mpsc de tokio es el gemelo async del canal de std: send y recv hacen await.

use tokio::sync::mpsc;

#[tokio::main]
async fn main() {
    let (tx, mut rx) = mpsc::channel::<String>(8);

    for id in 0..3 {
        let tx = tx.clone();
        tokio::spawn(async move {
            tx.send(format!("job {id} done")).await.unwrap();
        });
    }
    drop(tx);

    while let Some(message) = rx.recv().await {
        println!("{message}");
    }
}

Cómo funciona

  1. channel(n) acota la cola, aplicando backpressure.
  2. recv devuelve None cuando todos los emisores se soltaron.
  3. El productor y el consumidor son tareas comunes.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
306
Tokens
110
Ritmo de tres estrellas
110 tpm

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

Escribe este fragmento

Paso 5 de 6 en Async con tokio; paso 13 de 15 en Concurrencia y async.

← Anterior Siguiente →