select巨集也允許併發的執行Future,但是和join、try_join不同的是,select巨集只要有一個Future返回,就會返回。
示例
- 原始碼
use futures::{select, future::FutureExt, pin_mut};
use tokio::runtime::Runtime;
use std::io::Result;
async fn function1() -> Result<()> {
tokio::time::delay_for(tokio::time::Duration::from_secs(10)).await;
println!("function1 ++++ ");
Ok(())
}
async fn function2() -> Result<()> {
println!("function2 ++++ ");
Ok(())
}
async fn async_main() {
let f1 = function1().fuse();
let f2 = function2().fuse();
pin_mut!(f1, f2);
select! {
_ = f1 => println!("task one completed first"),
_ = f2 => println!("task two completed first"),
}
}
fn main() {
let mut runtime = Runtime::new().unwrap();
runtime.block_on(async_main());
println!("Hello, world!");
}
- 配置檔案
[dependencies]
futures = "0.3.5"
tokio = { version = "0.2", features = ["full"] }
- 執行結果
function2 ++++
task two completed first
Hello, world!
本作品採用《CC 協議》,轉載必須註明作者和本文連結