Как join_all из Vec асинхронных - PullRequest
       8

Как join_all из Vec асинхронных

2 голосов
/ 13 октября 2019

Я хочу сгенерировать 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>>>`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...