Rustで複数のFutureをStreamにしBufferedを通して一括実行する

Streamにはfutures::stream::StreamExtというTraitがあり、これを使うことでbufferedというメソッドが使えるようになります。bufferedfutures::stream::Bufferedを返します。Bufferedfutures::stream::StreamExtというTraitがimplされているのでcollectというメソッドが使えます。

以上から複数のFutureを配列に入れ、Streamに変換したのち、Bufferedにし、まとめて、awaitすれば一括で実行された結果をまとめて取り出すことができるようです。

Cargo.toml

[dependencies]
tokio = "0.2.0-alpha.5"
futures-preview = { version = "=0.3.0-alpha.19" }

main.rs

#![feature(async_closure)]

use futures::stream::{self, StreamExt};

#[tokio::main]
async fn main() {
    let stream_futures: Vec<_> = (1..=3).into_iter().map(|i| (async move || -> i8 { i*2 })()).collect();
    let result = stream::iter(stream_futures).buffered(3).collect::<Vec<i8>>().await;
    assert_eq!(vec![2,4,6], result);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA