我想在一个项目中使用异步MongoDB。
我不想传递客户端,因为它需要传递多个任务和线程,所以我使用lazy_static
保留了一个静态客户端,但是,我不能在初始化块中使用await
。
我能做些什么来解决这个问题?
也欢迎提出不使用lazy_static
的建议。
use std::env;
use futures::stream::StreamExt;
use mongodb::{
bson::{doc, Bson},
options::ClientOptions,
Client,
};
lazy_static! {
static ref MONGO: Option<Client> = {
if let Ok(token) = env::var("MONGO_AUTH") {
if let Ok(client_options) = ClientOptions::parse(&token).await
^^^^^
{
if let Ok(client) = Client::with_options(client_options) {
return Some(client);
}
}
}
return None;
};
}
4条答案
按热度按时间fcwjkofz1#
我是根据rust论坛上某个人的建议而采用这种方法的。
rjee0c152#
但是我不能在初始化块中使用await。
您可以使用
futures::executor::block_on
绕过此问题我们遇到的是非异步闭包阻塞在单个线程中,直到将来解决为止。
oalqel3c3#
从
tokio::runtime::Runtime
创建一个新的运行时,并使用block_on
阻塞当前线程,直到完成。gcxthw6b4#
使用async_once机箱。
那么