pub struct SignalFuture<T = ()> { /* 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<T> SignalFuture<T>
impl<T> SignalFuture<T>
pub fn new() -> (SignalFuture<T>, SignalFutureController<T>)
Trait Implementations§
Source§impl<T> Future for SignalFuture<T>
impl<T> Future for SignalFuture<T>
Auto Trait Implementations§
impl<T> Freeze for SignalFuture<T>
impl<T = ()> !RefUnwindSafe for SignalFuture<T>
impl<T> Send for SignalFuture<T>where
T: Send,
impl<T> Sync for SignalFuture<T>where
T: Send,
impl<T> Unpin for SignalFuture<T>
impl<T = ()> !UnwindSafe for SignalFuture<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<F> IntoFuture for Fwhere
F: Future,
impl<F> IntoFuture for Fwhere
F: Future,
Source§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