cosmic-applets/applets/cosmic-applet-network/src/task.rs

25 lines
668 B
Rust
Raw Normal View History

2022-02-01 16:46:25 -05:00
// SPDX-License-Identifier: LGPL-3.0-or-later
use std::future::Future;
2022-02-02 16:28:08 -05:00
use tokio::sync::oneshot;
2022-02-01 16:46:25 -05:00
pub fn spawn<O, F>(future: F) -> tokio::task::JoinHandle<O>
where
F: Future<Output = O> + Send + 'static,
O: Send + 'static,
{
crate::RT.spawn(future)
}
pub fn spawn_local<F: Future<Output = ()> + 'static>(future: F) {
gtk4::glib::MainContext::default().spawn_local(future);
}
2022-02-02 16:28:08 -05:00
pub async fn wait_for_local<F: Future<Output = ()> + 'static>(future: F) {
let (tx, rx) = oneshot::channel::<()>();
gtk4::glib::MainContext::default().spawn_local(async move {
future.await;
let _ = tx.send(());
});
std::mem::drop(rx.await);
}