Bon, et tant que j'y suis, comment je suis sensé faire quand j'ai une opération qui prend du temps qui est lancée au clic sur un élément d'interface, et que l'objet retourné construit doit être stocké quand il est construit?
avec tokio ça me donne un truc comme ça
pub fn async_load_game_install(self : &SharedState, runtime: &Runtime, cdn : String, build : String, path : PathBuf) -> oneshot::Receiver<Option<FileSystem>> {
let (rx, tx) = oneshot::channel();
runtime.spawn(async move {
match FileSystem::open(path, build, cdn) {
Ok(fs) => rx.send(Some(fs)),
Err(_) => rx.send(None),
}
});
tx
}
Mais ensuite je veux pas await sur le receiver je veux juste que ça mutate self (qui est derrière un Arc<Mutex<>> maintenant); si j'await sur le receiver le problème reste le même, l'UI va stall
Un peu comme les futures en java avec du then, on_complete, etc
edit: de façon générale je comprend pas grand chose à l'async en rust, ça m'a l'air d'être le même enfer que les lifetime à polluer tout le code et tout rendre async sans raison