rid*_*rid 2 asynchronous rust hyper rust-tokio
我有一个无法在编译时计算的值。它需要在任何应用程序代码运行之前进行计算,然后它只会在应用程序的整个生命周期中被读取。它还需要传递给执行者,例如处理程序tokio和hyper处理程序。
我怎样才能安全、惯用地创造这样的价值,并且不会造成不必要的性能损失?
main并将其传递给hyper,它的寿命就不够长。lazy_static!,则仅在首次访问时才计算它。如果无法计算,那么我也不想运行应用程序的其余部分。我宁愿知道在启动应用程序时无法连接到数据库,而不是在客户端发出请求时无法连接到数据库。static mut,那么我就无法在安全代码中使用它。理想情况下,我想做类似的事情:
#[tokio::main]
pub async fn main() {
let db = init_db();
// This uses a hyper server, passes db around
// to tokio and hyper handlers, etc.
run_app(&db);
}
Run Code Online (Sandbox Code Playgroud)
您可以泄漏内存,以便引用具有'static生命周期:
#[tokio::main]
pub async fn main() {
let db = Box::leak(Box::new(init_db())) as &'static _;
// This uses a hyper server, passes db around
// to tokio and hyper handlers, etc.
run_app(db);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |