Module drone_core::async
[−]
[src]
Async/await syntax.
use drone_core::sync::spsc::oneshot; use futures::executor; fn plus_one( rx: oneshot::Receiver<usize, !>, ) -> impl Future<Item = usize, Error = oneshot::RecvError<!>> { AsyncFuture::new(|| { let number = await!(rx)?; Ok(number + 1) }) } fn main() { let (tx, rx) = oneshot::channel::<usize, !>(); let mut executor = executor::spawn(plus_one(rx)); assert_eq!(tx.send(Ok(1)), Ok(())); assert_eq!( executor.poll_future_notify(&NOTIFY_NOP, 0), Ok(Async::Ready(2)) ); }
use drone_core::sync::spsc::ring; use futures::executor; fn sum( rx: ring::Receiver<usize, !>, ) -> impl Future<Item = usize, Error = !> { AsyncFuture::new(|| { let mut sum = 0; await_for!(number in rx; { sum += number; }); Ok(sum) }) } fn main() { let (mut tx, rx) = ring::channel::<usize, !>(8); let mut executor = executor::spawn(sum(rx)); assert_eq!(tx.send_overwrite(3), Ok(())); assert_eq!(tx.send_overwrite(4), Ok(())); assert_eq!(tx.send_overwrite(5), Ok(())); drop(tx); assert_eq!( executor.poll_future_notify(&NOTIFY_NOP, 0), Ok(Async::Ready(12)) ); }
Structs
AsyncFuture |
A generator-based future. |