异步并发

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
use futures::join;
use async_std::task;
#[async_std::main]
async fn main() {
    let a = async { 
        task::sleep(std::time::Duration::from_secs(10)).await;
        1 
    };
    let b = async { 2 };
    assert_eq!(join!(a, b), (1, 2));
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use futures::future::join_all;
use async_std::task;
#[async_std::main]
async fn main() {
    let a = |i| async move { 
        task::sleep(std::time::Duration::from_secs(i)).await;
        i
    };
    let mut task_list = vec![];
    for i in 1..=10 {
        task_list.push(a(i));
    }
    let ans = join_all(task_list).await;
    println!("ans = {:?}", ans);
}
// ans = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]