asynchronous - 有没有办法在锈异步中同时轮询几个期货
问题描述
我正在尝试由迭代器并行执行几个 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
闭包。相反,您需要让闭包返回一个异步块:
move |(_, item)| async move { ... }
此外,请确保您.await
返回的 future 是join_all
为了确保实际轮询各个任务。
推荐阅读
- database - 我正在尝试设置 Dynamodb aws 数据库但出现错误
- sql - SQL Server 临时表:我可以记录特定的更改吗?
- python-2.7 - 错误:名称“变量”未在 python+AWS Lambda 中定义
- java - Spring Service Activator - 我们可以对 Java 中的两个不同输入通道使用与 ref 相同的方法吗?
- python - Conda 虚拟环境中的 Keras 无法卸载和无法使用 - Mac OS Catalina 10.15.2
- installation - 在 WSL UBUNTU 中安装 miniconda
- c++ - 创建一个包含当前时间作为文件名的文件
- laravel - 如何在laravel中删除hasmany关系数据
- postgresql - 写入用于将数据插入空表但未插入数据的函数
- typescript - 升级到 ts-jest 23 时 moduleNameMapper 停止工作