問題一覧に戻る
上級並行性
問題95: 非同期ストリーム
ストリームはイテレータの非同期版です。時間の経過とともに到着するデータを効率的に処理できるよう、値を非同期に生成します。tokio_streamはmap、filter、collectなどの馴染み深いメソッドを持つStreamExtトレイトを提供。ストリームはネットワークデータ、ファイルI/O、その他の非同期ソースの処理に不可欠です。async/awaitパターンとよく組み合わせられます。
use tokio_stream::{self as stream, };
#[tokio::main]
async fn main() {
// イテレータからストリームを作成
let mut s = stream::iter(vec![1, 2, 3]);
// ストリームの値を消費
while let Some(val) = s. {
println!("Got: {}", val);
}
// ストリーム値を変換
let s2 = stream::iter(vec![1, 2, 3])
.(|x| x * 2);
// ストリームをVecに収集
let v: Vec<i32> = s2.().await;
println!("{:?}", v);
}