Function std::sync::mpsc::sync_channel1.0.0[][src]

pub fn sync_channel<T>(bound: usize) -> (SyncSender<T>, Receiver<T>)
Expand description

创建一个新的同步有界通道。 SyncSender 上发送的所有数据将以与发送相同的顺序在 Receiver 上可用。 像异步 channel 一样,Receiver 将阻塞直到消息可用为止。 sync_channel 但是,发送者的语义差异很大。

该通道具有内部缓冲区,消息将在该缓冲区上排队。 bound 指定缓冲区大小。 当内部缓冲区已满时,future 将发送 block,等待缓冲区打开。 请注意,缓冲区大小为 0 是有效的,在这种情况下,它变为 “rendezvous channel”,其中每个 send 在与 recv 配对之前不会返回。

SyncSender 可以多次克隆到 send 到同一通道,但是仅支持一个 Receiver

与异步通道一样,如果在尝试使用 SyncSender 进行 send 时断开 Receiver,则 send 方法将返回 SendError

同样,如果在尝试 recv 时断开 SyncSender 的连接,则 recv 方法将返回 RecvError

Examples

use std::sync::mpsc::sync_channel;
use std::thread;

let (sender, receiver) = sync_channel(1);

// 这立即返回
sender.send(1).unwrap();

thread::spawn(move|| {
    // 这将阻塞,直到收到上一条消息为止
    sender.send(2).unwrap();
});

assert_eq!(receiver.recv().unwrap(), 1);
assert_eq!(receiver.recv().unwrap(), 2);
Run