</>
Plan du cours — 53/66

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();
CanalUsage
mpscFile de messages, N producteurs → 1 consommateur
oneshotUne valeur unique (réponse à une requête)
broadcastChaque message reçu par tous les abonnés
watchDernière valeur seulement (config, état)