如何从通道 vec 中选择一个?

问题描述

我想从频道中选择一个频道来发送/接收数据,怎么做?

use crossbeam_channel::select;
const CHANNEL_NUM: usize = 20;
fn main() {

    let mut senders = vec![];
    let mut receivers = vec![];
    for i in 0..CHANNEL_NUM {
        let (sender,receiver) = crossbeam_channel::unbounded();
        senders.push(sender);
        receivers.push(receiver);
    }

    // send thread
    let send_thread = std::thread::spawn(move || {
        select! {
            // how to select one from senders vec ?
        }
    });

    // recv thread
    let recv_thread = std::thread::spawn(move || {
        select! {
            // how to select one from receivers vec ?
        }
    });

    send_thread.join();
    recv_thread.join();

}

以下来自 crossbeam lib 的演示代码不符合我的要求,因为我想从通道 vec 中获取一个,不是文字表达式。

/// // None of the two operations will become ready within 100 milliseconds.
/// select! {
///     recv(r1) -> msg => panic!(),///     recv(r2) -> msg => panic!(),///     default(Duration::from_millis(100)) => println!("timed out"),/// }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)