有没有办法在生锈异步中同时轮询多个期货

Is there a way to poll several futures simultaniously in rust async

我正在尝试并行执行迭代器给出的多个 sqlx 查询。 这可能是我迄今为止最接近的一次。

let mut futures = HahshMap::new() // placeholder, filled HashMap in reality
    .iter()
    .map(async move |(_, item)| -> Result<(), sqlx::Error> {
        let result = sqlx::query_file_as!(
            // omitted
        )
            .fetch_one(&pool)
            .await?;
        channel.send(Enum::Event(result)).ignore();
        Ok(())
    })
    .clollect();
futures::future::join_all(futures);

所有查询和发送都是相互独立的,因此如果其中一个失败,其他的仍然应该得到处理。 此外,当前的异步闭包不可能像这样。

Rust 还没有 async 闭包。相反,您需要闭包 return 一个异步块:

move |(_, item)| async move { ... }

此外,请确保 .awaitjoin_all 编辑的未来 return 以确保实际轮询各个任务。