有没有办法在生锈异步中同时轮询多个期货
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 { ... }
此外,请确保 .await
由 join_all
编辑的未来 return 以确保实际轮询各个任务。
我正在尝试并行执行迭代器给出的多个 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 { ... }
此外,请确保 .await
由 join_all
编辑的未来 return 以确保实际轮询各个任务。