0
use std::iter;
fn worker_sum(from: u64, to: u64) -> u64 {
range(from, to).fold(0u64, |sum, x| sum + x)
}
fn main() {
let max = 5u64;
let step = 2u64;
let (sender, receiver) = channel::<u64>();
for x in iter::range_step_inclusive(0u64, max, step) {
let end = if x + step > max { max } else { x + step };
//println!("{} -> {} = {}", x, end, worker_sum(x, end));
let local_sender = sender.clone();
spawn(proc(){
local_sender.send(worker_sum(x, end));
});
}
loop {
match receiver.try_recv() {
Ok(x) => println!("{}", x),
Err(_) => break,
}
}
}
我得到的錯誤:分發跨工人工作鏽
task '' failed at 'sending on a closed channel', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsync/comm/mod.rs:573
不知何故,我明白的問題,而是如何正確地從通道「選擇」?雖然我使用的是nightly build,但據說這樣可以改進文檔(自0.13版本開始),但文檔卻非常稀少。
所以我的問題是:
- 如何與代碼中儘可能少的結構變化解決這個問題?
- 如何使代碼習慣?