问题
I have a list of async
functions in rust that I want to execute concurrently and then wait for all them to finish. The working code I have right now is
async fn start_consumers(&self) {
for consumer in &self.consumers {
consumer.consume().await;
}
}
This is not quite accurate as the functions are executed serially. I am looking for something like join!
, but which works on a dynamic vector, Using which I should be able to write something like
async fn start_consumers(&self) {
let mut v = Vec::new();
for consumer in &self.consumers {
consumer.consume();
}
join!(v);
}
Right now join!
supports only tuples. I am looking for an alternative for that. Something similar to Promise.all() in JavaScript.
回答1:
I also asked a similar question on the same day, but in my case I had a Result
wrapped in a Future
. So instead of join_all
I had to use try_join_all
回答2:
So after some searching I found that rust futures has a function called join_all which allows for waiting on a collection of futures.
use futures::future::join_all;
....
async fn start_consumers(&self) {
let mut v = Vec::new();
for consumer in &self.consumers {
v.push(consumer.consume());
}
join_all(v).await;
}
来源:https://stackoverflow.com/questions/63326882/how-to-wait-for-a-list-of-async-function-calls-in-rust