Ideas for Result/Error handling #1132
antonWetzel
started this conversation in
Ideas
Replies: 1 comment
-
|
I think chunks.into_par_iter().try_for_each_init(
|| Some(std::fs::File::open(&path)),
|file, (chunk_start, chunk_length)| {
let file = match file {
Some(Ok(file)) => file, // use it!
Some(Err(_)) => file.take().unwrap()?, // steal the option and return its inner error
None => unreachable!(), // we shouldn't be called again after an error
};
// Now just return the computation's Result
expensive_computation(file, chunk_start, chunk_length)
},
)
We don't have a way to pass a borrowed reference as a regular |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Problem
I got a file with independant chunks and want to do an expensive computation for every chunk.
Now I want to handle the errors by returning, when an error occurs.
Trying to handle the errors
The error with the computations can be catched with an
mapinstead offor_eachThe error in the
initis hard to catch, because it is always owned by rayon, not my code.Questions
Solutions?
(Note: concepts which may clash with rayon internals or other limitations)
For the computation
Let tasks without a return value return a generic
TaskResultThe
for_eachwould check theTaskResultand maybe cancel. I hope this does not generate overhead for().For the init
The
Result<_, Init>and the genericInitvalue can't be differentiated easily, so I don't see an easy solution.It would be cool if the
..._with_initwould be just awith_initmethodand then maybe an
error_filter, which collects the first encountered errorBeta Was this translation helpful? Give feedback.
All reactions