0

我想更改以下代码以避免使用 .unwrap 或 .expect :

thread::scope(|s| {
    for name in names {
        s.spawn(move |_| {
            let path_to_file = format!("{}{}", base, name.as_str());
            let path_to_file_written = format!("{}{}", guichetout, name.as_str());
            write_file(path_to_file.as_str(), name.as_str(), guichetout)
                .expect("cannot write data");
            log_hash(&path_to_file_written)
                .expect("Cannot write hash !");
        });
    }
})
.unwrap();

我目前正在使用 crossbeam_utils::thread 并且正在考虑切换到人造丝。所以我需要将此代码更改为具有各种组合器的迭代器。我已经尝试了很多东西,但没有一个能正常工作。因此,如果有人可以帮助我,那就太好了。

4

1 回答 1

0
  1. 将最里面的代码移到一个函数中,这样你就可以很容易地返回Result并使用?操作符来处理错误。

  2. 使用通道(std 的mpsc通道或 crossbeam 的更快通道)将结果发回。if let Err(e) = fallible() { channel.send(e) }. 在另一个线程上,您可以从该通道读取并查看您是否收到错误,或者通道已关闭而没有错误到达(成功)。

于 2020-06-10T21:43:55.273 回答