收件人关闭并返回一个SendError尝试通过通道发送

收件人关闭并返回一个SendError尝试通过通道发送

问题描述:

我试图设置两个线程之间的双向通信:子线程既可以发送到父进程,也可以从父进程接收,父进程可以发送去和从孩子接收。由于这样的事实,在锈通道是单向的,我使用的是一组双通道的,像这样的组织(从我家酿线程库代码段):收件人关闭并返回一个SendError尝试通过通道发送

let (tx, rx) = channel(); 
let (tx2, rx2) = channel(); 

(Endpoint { 
    sender: tx2, 
    receiver: rx, 
}, 
Endpoint { 
    sender: tx, 
    receiver: rx2, 
}) 

我在我的设置功能的代码如下所示:

let BiChannel { 
    e1: world, 
    e2: thread, 
} = BiChannel::new(); 

let ws = WorldState { 
    ... 
    thread_endpoint: thread, 
}; 
std::thread::spawn(threading::handle_life(world)); 

在这个片段中,threading::handle_life函数将返回使用端点通过此举闭合(world在上面的代码)传达给父线程,而父线程使用ws.thread_endpoint交谈的子线程。

我打电话给所有打到端点上send的电话打包,所以如果它发送失败,它会崩溃。果然,我得到一个运行时错误,看起来像这样:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "SendError(..)"', src/libcore/result.rs:860 
note: Run with `RUST_BACKTRACE=1` for a backtrace. 

的文档上,这是非常微薄的,但我能图什么小了是,如果通道被关闭,这只是发生。

事实证明,问题在于我忘记将消息接收代码放入子线程中,因此一旦它收到第一条消息,就会退出并关闭对应的通道。