这是我最近开始研究的生锈新手。我正在尝试让rest正常工作,下面的代码对我来说很好。
MyRest.rs
pub struct RestBro;
impl RestBro {
pub async fn run_bro() {
let routes_post = warp::post()
.and(warp::path!("v1" / "homie").and_then(my_function));
warp::serve(routes)
.run(([127, 0, 0, 1], 3003))
.await;
}
}
main.rs
#[tokio::main]
async fn main() {
let rb = RestBro;
rb.run_bro().await;
}
现在的问题是,我不希望我的主程序是一个async
,我只是不知道如何像上面那样无限期地运行这个run_bro()
函数。我尝试过block_on
,这只是阻止和等待run_bro
中断,这是预期的,而当我尝试spawn
时,它只是运行并退出。关于Tokio的文档使我感到困惑,这就是我在这里寻求帮助的原因。
block_on
fn main() {
let async_block = async {
let rb = RestBro;
rb.run_bro().await;
};
let tr = tokio::runtime::Runtime::new().unwrap();
tr.block_on(async_block);
println!("Everything working good!");
}
产卵
fn main() {
let tr = tokio::runtime::Runtime::new().unwrap();
tr.spawn(async {
let rb = RestBro;
rb.run_bro().await;
});
println!("Everything working good!");
}
要明确的是,我的问题是如何调用异步run_bro()
函数并从同步主服务器等待?提前谢谢!!
发布于 2021-09-18 03:47:56
需要明确的是,我的问题是如何调用异步run_bro()函数并从同步主服务器等待?
我不明白为什么要将server
包装在spawn
中。在您的代码中,它不能工作,因为您的主程序关闭了,而spawn
也随之关闭。
fn main() {
let tr = tokio::runtime::Runtime::new().unwrap();
tr.spawn(async {
let rb = RestBro;
rb.run_bro().await;
});
println!("Everything working good!");
}
如果你把它改成这个,它会工作5秒。
use std::{thread, time};
fn main() {
let tr = tokio::runtime::Runtime::new().unwrap();
tr.spawn(async {
let rb = RestBro;
rb.run_bro().await;
});
println!("Everything working good!");
thread::sleep(time::Duration::from_secs(5));
}
或无限期:
fn main() {
let tr = tokio::runtime::Runtime::new().unwrap();
tr.spawn(async {
let rb = RestBro;
rb.run_bro().await;
});
println!("Everything working good!");
tr.join().unwrap();
}
https://stackoverflow.com/questions/69230825
复制