1
我試圖設置兩個線程之間的雙向通信:子線程既可以發送到父進程,也可以從父進程接收,父進程可以發送去和從孩子接收。由於這樣的事實,在鏽通道是單向的,我使用的是一組雙通道的,像這樣的組織(從我家釀線程庫代碼段):收件人關閉並返回一個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.
的文檔上,這是非常微薄的,但我能圖什麼小了是,如果通道被關閉,這只是發生。