Я хочу сгенерировать Vec ожиданий и затем выполнить их с join_all
. Я пробовал этот код до сих пор
#![feature(async_await)]
use futures::future::join_all;
use std::future::Future;
async fn hello(name: &str) -> String {
format!("Hello {}!", name)
}
async fn main() {
let urls = vec!["Peter", "Hans", "Jake"];
let mut requests : Vec<Box<dyn Fn() -> Box<dyn Future<Output=String>>>> = vec![];
for url in urls {
requests.push(Box::new(|| Box::new(hello(&url))));
}
let responses : Vec<String> = join_all(requests).await;
println!("Response: {:?}", responses);
}
, но получаю следующее сообщение об ошибке.
error[E0277]: the trait bound `dyn std::ops::Fn() -> std::boxed::Box<dyn core::future::future::Future<Output = std::string::String>>: std::marker::Unpin` is not satisfied
--> src/main.rs:15:45
|
15 | let responses : Vec<String> = join_all(requests).await;
| ^^^^^^^^ the trait `std::marker::Unpin` is not implemented for `dyn std::ops::Fn() -> std::boxed::Box<dyn core::future::future::Future<Output = std::string::String>>`
|
::: /home/peter/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-preview-0.3.0-alpha.19/src/future/join_all.rs:118:14
|
118 | I::Item: Future,
| ------ required by this bound in `futures_util::future::join_all::join_all`
|
= note: required because of the requirements on the impl of `core::future::future::Future` for `std::boxed::Box<dyn std::ops::Fn() -> std::boxed::Box<dyn core::future::future::Future<Output = std::string::String>>>`