Stream
Trait
Stream
trait은 Future
와 유사하지만 종료하기 이전에 여러 개의 값을 생성 할 수 있습니다.
이느 표준 라이브러리의 Iterator
trait과 유사합니다 :
trait Stream {
/// The type of the value yielded by the stream.
type Item;
/// Attempt to resolve the next item in the stream.
/// Returns `Poll::Pending` if not ready, `Poll::Ready(Some(x))` if a value
/// is ready, and `Poll::Ready(None)` if the stream has completed.
fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>)
-> Poll<Option<Self::Item>>;
}
Stream
의 일반적인 예로는 futures
crate의 channel type의 Receiver
가 있습니다.
Sender
-end 에서 값이 전송 될 때마다 receiver에서는 Some(val)
이 나옵니다.
그리고 Sender
가 삭제되고 보류 중인 모든 메시지가 수신되면 None
을 산출 할 것입니다.
async fn send_recv() {
const BUFFER_SIZE: usize = 10;
let (mut tx, mut rx) = mpsc::channel::<i32>(BUFFER_SIZE);
tx.send(1).await.unwrap();
tx.send(2).await.unwrap();
drop(tx);
// `StreamExt::next` is similar to `Iterator::next`, but returns a
// type that implements `Future<Output = Option<T>>`.
assert_eq!(Some(1), rx.next().await);
assert_eq!(Some(2), rx.next().await);
assert_eq!(None, rx.next().await);
}