我正在尝试arc
为 Warp 路由实现共享状态 ()。鉴于此主要功能:
#[tokio::main]
async fn main() {
let ack_vec: Vec<api::Acknowledgement> = Vec::new();
let arc = Arc::new(Mutex::new(ack_vec));
// GET /call/:id
let call = warp::get()
.and(warp::path("call"))
.and(warp::path::param())
.map({
let queue = arc.clone(); // clone handle outside move
move |id: u32| {
let ack = api::Acknowledgement::new(id);
let mut queue = queue.lock().unwrap();
queue.push(ack);
println!("pushed to queue: {:?}", queue);
Ok(warp::reply::json(&id))
}
});
let routes = call
.with(warp::trace::request());
warp::serve(routes).run(([127, 0, 0, 1], 4000)).await;
// problem starts here
loop {
let queue = arc.clone(); // clone the handle
let mut queue = queue.lock().unwrap();
println!("popped from queue: {:?}", queue.pop());
}
}
现在,如果我点击/call
路线,我可以看到它Acknowledgement
已添加到队列中。
最后loop
应该在添加队列时从队列中弹出每个值。现在它什么也没做。
我尝试将其包装在 a 中tokio::spawn
,但仍然没有结果(没有任何内容打印到标准输出)。
我究竟做错了什么?