Struct signal_future::SignalFuture
source · pub struct SignalFuture { /* private fields */ }Expand description
A simple future that can be programmatically resolved externally using the controller that is provided in tandem when creating a SignalFuture. This makes it useful as a way to signal to some consumer of the future that something has completed, using standard async syntax and semantics.
Examples
struct DelayedWriter { fd: File, pending: Mutex<Vec<(u64, Vec<u8>, SignalFutureController)>> }
impl DelayedWriter {
pub async fn write(&self, offset: u64, data: Vec<u8>) {
let (fut, fut_ctl) = SignalFuture::new();
self.pending.lock().await.push((offset, data, fut_ctl));
fut.await
}
pub async fn background_loop(&self) {
loop {
sleep(Duration::from_millis(500));
for (offset, data, fut_ctl) in self.pending.lock().await.drain(..) {
self.fd.write_at(offset, data).await;
fut_ctl.signal();
};
};
}
}Implementations§
source§impl SignalFuture
impl SignalFuture
pub fn new() -> (SignalFuture, SignalFutureController)
Trait Implementations§
source§impl Future for SignalFuture
impl Future for SignalFuture
Auto Trait Implementations§
impl RefUnwindSafe for SignalFuture
impl Send for SignalFuture
impl Sync for SignalFuture
impl Unpin for SignalFuture
impl UnwindSafe for SignalFuture
Blanket Implementations§
source§impl<F> IntoFuture for Fwhere
F: Future,
impl<F> IntoFuture for Fwhere F: Future,
§type IntoFuture = F
type IntoFuture = F
Which kind of future are we turning this into?
source§fn into_future(self) -> <F as IntoFuture>::IntoFuture
fn into_future(self) -> <F as IntoFuture>::IntoFuture
Creates a future from a value. Read more