Присоединяйтесь к динамическому числу фьючерсов

🔁 присоединяйтесь! может объединять несколько асинхронных операций:

#![feature(future_join)]

use std::future::join;

async fn one() -> usize { 1 }
async fn two() -> usize { 2 }

let x = join!(one(), two()).await;
assert_eq!(x, (1, 2));

Есть ли способ объединить несколько фьючерсов из вектора, чтобы количество асинхронных вызовов было динамическим (неизвестным во время компиляции)?

Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
3
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать join_all из ящика фьючерсов.

Из документов:

use futures::future::join_all;

async fn foo(i: u32) -> u32 { i }

let futures = vec![foo(1), foo(2), foo(3)];

assert_eq!(join_all(futures).await, [1, 2, 3]);

Является ли макрос join более эффективным или почему не стоит всегда использовать эту функцию вместо макроса?

leo848 25.11.2022 19:13

@ leo848 Макрос возвращает кортеж, поэтому его можно использовать с фьючерсами, которые возвращают разные типы. join_all принимает и возвращает массив, поэтому результаты должны быть одного типа.

Colonel Thirty Two 25.11.2022 19:45

Другие вопросы по теме