这个程序是用来打印并行运行线程的。在结束线程之前打印所有的开始线程。但是这个程序抛出了错误the trait
FromIterator〈()〉is not implemented for Vec<JoinHandle<>> the trait FromIterator<T> is implemented for Vec<T>
。这个程序有什么问题吗?任何反馈都很有帮助。
let handles: Vec<JoinHandle<String>> = (0..=10).map(|i| {
let delay = rand::thread_rng().gen_range(10..=2000);
let builder =
thread::Builder::new().name(format!("Thread-{}", i));
builder.spawn(move || {
println!(
"thread started = {}",
thread::current().name().unwrap()
);
thread::sleep(Duration::from_millis(delay));
thread::current().name().unwrap().to_owned()
}).unwrap();
}).collect();
for h in handles {
let r = h.join().unwrap();
println!("thread done = {:?}", r);
}
1条答案
按热度按时间chhkpiq41#
如果你想隐式返回一个函数的最后一个值(无论是顶级函数还是闭包),你不应该用分号结束它。分号终止的是为了效果而运行的语句,而不是返回函数的最终表达式。替换
与