Propagate jitterbug cancel to bachata
This commit is contained in:
parent
807117eb8a
commit
35cf37c782
|
@ -20,6 +20,8 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|||
handle.await?;
|
||||
}
|
||||
|
||||
println!("{i} joined");
|
||||
|
||||
Ok(()) as Result<_, jive::task::sync::JoinError>
|
||||
})
|
||||
})
|
||||
|
@ -29,6 +31,8 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|||
handle.await??;
|
||||
}
|
||||
|
||||
println!("all joined");
|
||||
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
|
|
@ -92,8 +92,23 @@ impl RuntimeHandle {
|
|||
future: impl Future<Output = T> + 'static,
|
||||
) -> jitterbug::JoinHandle<T> {
|
||||
let (tx, rx) = jitterbug::oneshot();
|
||||
bachata::spawn(async move { tx.send(future.await) });
|
||||
self.spawn(async move { rx.await.unwrap() })
|
||||
let (cancel_tx, cancel_rx) = jitterbug::oneshot::<()>();
|
||||
|
||||
bachata::spawn(async move {
|
||||
let future = std::pin::pin!(future);
|
||||
|
||||
match select::select(cancel_rx, future).await {
|
||||
select::Either::Left(_) => (), // canceled
|
||||
select::Either::Right(item) => {
|
||||
let _ = tx.send(item);
|
||||
}
|
||||
}
|
||||
});
|
||||
self.spawn(async move {
|
||||
let out = rx.await.unwrap();
|
||||
drop(cancel_tx);
|
||||
out
|
||||
})
|
||||
}
|
||||
|
||||
pub fn spawn_blocking<T: Send + 'static>(
|
||||
|
|
Loading…
Reference in a new issue