在前一節,我們簡單介紹了select巨集。其實在select巨集中,還可使用default和complete,前者表示沒有分支完成,而後者則表示所有的分支都已經完成並且不會再取得進展的情況。
- 原始碼
use futures::{future, select};
use tokio::runtime::Runtime;
async fn count() {
let mut a_fut = future::ready(4);
let mut b_fut = future::ready(6);
let mut total = 0;
loop {
select! {
a = a_fut => total += a,
b = b_fut => total += b,
complete => break,
default => unreachable!(), // never runs (futures are ready, then complete)
};
}
assert_eq!(total, 10);
}
fn main() {
let mut runtime = Runtime::new().unwrap();
runtime.block_on(count());
}
- 配置
[dependencies]
futures = "0.3.5"
tokio = { version = "0.2", features = ["full"] }
本作品採用《CC 協議》,轉載必須註明作者和本文連結