rust - 如何找到合适的组合器以使此代码与rayon一起使用?

标签 rust iterator rayon

我想更改以下代码,以避免使用.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,并且正在考虑切换到人造丝。因此,我需要将此代码更改为具有各种组合器的迭代器。
我已经尝试了很多东西,但是没有任何正常工作。因此,如果有人可以帮助我,那就太好了。

最佳答案

  • 将最里面的代码移到函数中,以便您可以轻松返回Result并使用?运算符处理错误。
  • 使用一个 channel (std的mpsc channel 或crossbeam的更快的 channel )将结果发送回去。 if let Err(e) = fallible() { channel.send(e) }。在另一个线程上,您可以从该 channel 读取并查看是否出错,或者 channel 是否关闭而没有错误到达(成功)。
  • 关于rust - 如何找到合适的组合器以使此代码与rayon一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61954738/

    相关文章:

    rust - 如何将 Rayon 与现有迭代器一起使用?

    parallel-processing - 不能使用 Rayon 的 `.par_iter()`

    rust - 如何在 Rust 中链接返回结果的函数?

    rust - Github Actions + 私有(private)存储库无法正常工作

    multithreading - 如何使用人造丝进行枚举迭代?

    python - 迭代 ndarray 的某些(但不是全部)维度

    vb.net - 我可以在 VB.NET 中实现 IEnumerable 函数的 yield 返回吗?

    asynchronous - 如何实现对异步fn进行轮询的Future或Stream?

    async-await - 如何在 Tokio 中使用 async/await 语法?

    rust - 如何将迭代器适配器与返回impl Trait作为IntoIterator的IntoIter关联类型的函数一起使用?