Canaux : communication entre tâches
Avancéuse tokio::sync::{mpsc, oneshot, broadcast, watch};
// mpsc : plusieurs producteurs, un consommateur
let (tx, mut rx) = mpsc::channel::<String>(32); // capacité = back-pressure
let tx2 = tx.clone();
tokio::spawn(async move { tx.send("depuis A".into()).await.unwrap(); });
tokio::spawn(async move { tx2.send("depuis B".into()).await.unwrap(); });
while let Some(msg) = rx.recv().await { // None quand tous les tx sont droppés
println!("{msg}");
}
// oneshot : une seule réponse (patron requête/réponse)
let (tx, rx) = oneshot::channel();
tx.send(42).unwrap();
let v = rx.await.unwrap();
| Canal | Usage |
|---|---|
mpsc | File de messages, N producteurs → 1 consommateur |
oneshot | Une valeur unique (réponse à une requête) |
broadcast | Chaque message reçu par tous les abonnés |
watch | Dernière valeur seulement (config, état) |