【发布时间】:2014-09-20 04:42:31
【问题描述】:
我正在尝试并行读取目录中文件的内容。我遇到了终身问题。
我的代码如下所示:
use std::io::fs;
use std::io;
use std::collections::HashMap;
use std::comm;
use std::io::File;
fn main() {
let (tx, rx) = comm::channel(); // (Sender, Receiver)
let paths = fs::readdir(&Path::new("resources/tests")).unwrap();
for path in paths.iter() {
let task_tx = tx.clone();
spawn(proc() {
match File::open(path).read_to_end() {
Ok(data) => task_tx.send((path.filename_str().unwrap(), data)),
Err(e) => fail!("Could not read one of the files! Error: {}", e)
};
});
}
let mut results = HashMap::new();
for _ in range(0, paths.len()) {
let (filename, data) = rx.recv();
results.insert(filename, data);
}
println!("{}", results);
}
我得到的编译错误是:
错误:
paths寿命不够长注意:引用必须在静态生命周期内有效...
注意:...但借用值仅对 7:19 的区块有效
我还尝试在循环中使用into_iter()(或之前的move_iter())但没有取得多大成功。
我怀疑这与生成的任务在整个 main() 范围之外仍然存在有关,但我不知道如何解决这种情况。
【问题讨论】:
标签: rust