009 Rust 非同步程式設計,select 巨集中的使用 default 和 complete

linghuyichong發表於2020-07-01

在前一節,我們簡單介紹了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 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章