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
channel(n)acota la cola, aplicando backpressure.recvdevuelveNonecuando todos los emisores se soltaron.- El productor y el consumidor son tareas comunes.
Palabras clave y builtins usados aquí
SomeStringasyncawaitdropfnforinletmovemutusewhile
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.
Paso 5 de 6 en Async con tokio; paso 13 de 15 en Concurrencia y async.