在Rust中,async/await
用于编写异步代码。它允许您以同步的方式编写异步代码,使得异步操作更易于理解和编写。
安装依赖:
bash
cargo add futures
cargo add async-std
使用示例:
示例1:
rust
use async_std::task::block_on;
fn main() {
block_on(hello());
}
async fn hello() {
println!("hello , world!!!");
}
示例2:
rust
use std::time::Duration;
use async_std::task::{block_on, sleep};
fn main() {
let future = hello();
block_on(future); // 会阻塞线程等待异步任务完成
println!("hello main");
}
async fn hello() {
println!("hello , world!!!");
// 使用async_std运行时的sleep,不要使用线程的sleep,睡眠3秒
sleep(Duration::from_secs(3)).await;
}
示例3:
async代码块:
rust
use std::{future::Future, time::Duration};
use async_std::task::{block_on, sleep};
fn main() {
let future = hello();
block_on(future); // 会阻塞线程等待异步任务完成
println!("hello main");
}
fn hello() -> impl Future<Output = ()> {
async {
println!("hello , world!!!");
// 使用async_std运行时的sleep,不要使用线程的sleep,睡眠3秒
sleep(Duration::from_secs(3)).await;
}
}
使用await:
使用await,
它只能在async函数或者async代码块中用,
它会等待Future代码直到完成,
它不会阻塞当前线程,线程还可以执行其他的Future
rust
use std::time::Duration;
use async_std::task::{block_on, sleep};
fn main() {
block_on(order());
}
async fn cook() -> String {
sleep(Duration::from_secs(3)).await;
"糖醋排骨".to_string()
}
async fn order() {
println!("来一份糖醋排骨!!!");
let paigu = cook().await;
println!("{:?}", paigu);
}