rust - 在闭包内共享连接池

标签 rust

我有以下代码:

#[async_std::main]
async fn main() -> tide::Result<()> {
    let mut app = tide::new();

    let pool = MySqlPoolOptions::new()
        .max_connections(500)
        .connect(&"mysql://root:root@127.0.0.1/test").await?;
        

    app.at("/").get(|_req: Request<()>| async move {
        let row: (i64,) = sqlx::query_as("select sleep(FLOOR(RAND()*10)) as s")
                                .fetch_one(&pool).await?;
                                
        Ok(Body::from_json(&row)?)
    });
但是rust编译器提示closure is FnOnce because it moves the variable pool out of its environment。据我了解,这是一个由于借阅检查器而引起的问题:

通过将pool传递给闭包并在闭包上使用move语义来实现
  • ,我是说我希望将引用的变量移至闭包

  • 我的问题是:将sqlx连接池设施与此类代码一起使用的正确方法是什么?这是我的第一个防 rust 程序,所以我还不太了解借位检查器

    最佳答案

    您应该使用应用程序状态并在其中存储池,这是example如何在请求处理程序中设置和使用状态

    关于rust - 在闭包内共享连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65117107/

    相关文章:

    reference - Rust 生命周期错误预期具体生命周期但发现绑定(bind)生命周期

    rust - 你应该如何在 Rust 中进行指针运算?

    macros - 如何将命名循环标签传递给 Rust 中的宏?

    rust - 如何在 Rust 的向量中对连续整数进行分组?

    rust - Google chrome 和 Apple M1 中的计算着色器

    regex - 如何在 Rust 中使用带反向引用的正则表达式进行正则表达式字符串替换?

    rust - 什么时候,为什么要使用i8而不是i32?

    rust - 在 Rust 中使用 `num::Float` 特性并与基本类型交互时如何最小化样板文件的数量

    ffi - 在 FFI 中使用 c_void

    rust - 为什么调用 FnOnce 关闭是一个 Action ?