Rust once_cell的异步版本,或避免错误的方法[E0744]:`static`中不允许使用`wait`?

Rust once_cell的异步版本,或避免错误的方法[E0744]:`static`中不允许使用`wait`?,rust,lazy-evaluation,sqlx,Rust,Lazy Evaluation,Sqlx,我一直在使用once\u cell做很多只需要做一次的工作,然后作为只读全局保存。这很好,因为我不必把这些东西到处传。我想知道这样的东西是否允许用于db句柄/池 静态池:POOL=PgPoolOptions::new() .最大连接数(5) .连接(“postgres://postgres:password@本地主机/测试) .等待 .unwrap(); 但遗憾的是,这不起作用,因为。wait error[E0744]: `.await` is not allowed in a `static

我一直在使用
once\u cell
做很多只需要做一次的工作,然后作为只读全局保存。这很好,因为我不必把这些东西到处传。我想知道这样的东西是否允许用于db句柄/池

静态池:POOL=PgPoolOptions::new() .最大连接数(5) .连接(“postgres://postgres:password@本地主机/测试) .等待 .unwrap(); 但遗憾的是,这不起作用,因为
。wait

error[E0744]: `.await` is not allowed in a `static`
  --> src/main.rs:10:31
而且,如果我尝试在单元格中封装一次,我会得到

static POOL = Lazy::new(|| sqlx_rt::block_on(
  PgPoolOptions::new()
      .max_connections(5)
      .connect("postgres://postgres:password@localhost/test")
      .await
) );

如果cell不使用异步API,是否仍可以执行我想要的操作。相反,您可以从主函数初始化静态:

静态池:OnceCell=OnceCell::new(); #[rt::main] 异步fn main(){ 让pg_pool=PgPoolOptions::new() .最大连接数(5) .连接(“postgres://postgres:password@本地主机/测试) .等待 .unwrap(); POOL.set(pg_POOL.unwrap(); }
在每次需要访问静态文件时,都可以在异步上下文中使用静态文件,但。。。我认为最好的方法是通过在异步fn main中自己调用init来实现您的单例