ho qualche codice che utilizza scoped_threadpool un po 'come questo:Come posso restituire un errore da un thread scoped_threadpool?
extern crate scoped_threadpool;
use scoped_threadpool::Pool;
use std::error::Error;
fn main() {
inner_main().unwrap();
}
fn inner_main() -> Result<(), Box<Error>> {
let mut pool = Pool::new(2);
pool.scoped(|scope| {
scope.execute(move || {
// This changed to become fallible
fallible_code();
});
});
Ok(())
}
fn fallible_code() -> Result<(), Box<Error + Send + Sync>> {
Err(From::from("Failing"))
}
La funzione fallible_code
recentemente cambiato per restituire un Result
, e mi piacerebbe per propagare l'errore di fuori del blocco pool.scoped
. Tuttavia, la firma di Scope::execute
non consente per un valore di ritorno:
fn execute<F>(&self, f: F)
where F: FnOnce() + Send + 'scope
Sto usando scoped_threadpool 0.1.7.
L'idea sembra buona, ma non si dovrebbe 'ret' essere' Sync'? –
@MatthieuM. È, ed è per questo che 'ret.map_err (| x | x as Box)' è necessario per abbinare il tipo di ritorno di inner_main'. –
Veedrac