41 lines
900 B
Rust
41 lines
900 B
Rust
use std::time::Duration;
|
|
|
|
use tokio::{join, select};
|
|
use tokio::sync::oneshot::channel;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let (tx1, rx1) = channel::<i32>();
|
|
|
|
let a = tokio::spawn(async move {
|
|
tokio::time::sleep(Duration::from_millis(2000)).await;
|
|
let _ = tx1.send(1);
|
|
println!(">>> send tx1");
|
|
});
|
|
|
|
select! {
|
|
a = rx1 => {
|
|
println!("tx: {:?}", a);
|
|
}
|
|
b = run() => {
|
|
println!("run: {:?}", b);
|
|
}
|
|
c = tokio::time::sleep(Duration::from_millis(1500)) => {
|
|
println!("timeout: {:?}", c);
|
|
}
|
|
}
|
|
|
|
println!("join: {:?}", join!(a));
|
|
|
|
println!(">> pre end");
|
|
tokio::time::sleep(Duration::from_millis(2000)).await;
|
|
println!(">> end");
|
|
}
|
|
|
|
async fn run() {
|
|
for i in 0.. {
|
|
tokio::time::sleep(Duration::from_millis(300)).await;
|
|
println!("# {}", i);
|
|
}
|
|
}
|