チャネル
Rustのチャネルには二つの部品があります: Sender<T>
とReceiver<T>
です。この2つの部品はチャネルによって繋がっていますが、見ることができるのはエンドポイントだけです。
use std::sync::mpsc; fn main() { let (tx, rx) = mpsc::channel(); tx.send(10).unwrap(); tx.send(20).unwrap(); println!("Received: {:?}", rx.recv()); println!("Received: {:?}", rx.recv()); let tx2 = tx.clone(); tx2.send(30).unwrap(); println!("Received: {:?}", rx.recv()); }
mpsc
は Multi-Producer, Single-Consumerの略称です。Sender
とSyncSender
はClone
を実装している(よって複数のproducerが作成可能)のですが、Receiver
についてはそうではありません。send()
とrecv()
はResult
を返します。もしErr
が返された場合、これは、対応するSender
かReceiver
のいずれかがドロップされ、チャンネルが閉じられたことを意味します。