Function relm4::spawn_blocking
source · pub fn spawn_blocking<F, R>(func: F) -> JoinHandle<R> ⓘwhere
F: FnOnce() -> R + Send + 'static,
R: Send + 'static,
Expand description
Spawns a blocking task in a background thread pool.
Examples found in repository?
src/channel/component.rs (line 103)
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
pub fn spawn_command<Cmd>(&self, cmd: Cmd)
where
Cmd: FnOnce(Sender<CommandOutput>) + Send + 'static,
{
let sender = self.command.clone();
crate::spawn_blocking(move || cmd(sender));
}
/// Spawns a future that will be dropped as soon as the factory component is shut down.
///
/// Essentially, this is a simpler version of [`Self::command()`].
pub fn oneshot_command<Fut>(&self, future: Fut)
where
Fut: Future<Output = CommandOutput> + Send + 'static,
{
// Async closures would be awesome here...
self.command(move |out, shutdown| {
shutdown
.register(async move { out.send(future.await) })
.drop_on_shutdown()
});
}
/// Spawns a synchronous command that will be dropped as soon as the factory component is shut down.
///
/// Essentially, this is a simpler version of [`Self::spawn_command()`].
pub fn spawn_oneshot_command<Cmd>(&self, cmd: Cmd)
where
Cmd: FnOnce() -> CommandOutput + Send + 'static,
{
let handle = crate::spawn_blocking(cmd);
self.oneshot_command(async move { handle.await.unwrap() })
}