use std::time::Duration; use tokio::sync::oneshot::channel; #[tokio::main] async fn main() { let (tx1, rx1) = channel::(); let (_tx2, rx2) = channel::(); tokio::spawn(async move { tokio::time::sleep(Duration::from_millis(200)).await; tx1.send(1); }); println!("start select"); tokio::select! { val = rx1 => { println!("rx1 completed first with {:?}", val); } val = rx2 => { println!("rx2 completed first with {:?}", val); } } println!("end select"); }