virtual_mio/waker.rs
1use std::task::{Context, Poll, Waker};
2
3use futures::Future;
4
5pub fn block_on<'a, A>(task: impl Future<Output = A> + 'a) -> A {
6 // Create the waker
7 let (parker, unparker) = parking::pair();
8 let waker = Waker::from(unparker.clone());
9 let mut cx = Context::from_waker(&waker);
10
11 let mut task = Box::pin(task);
12 loop {
13 match task.as_mut().poll(&mut cx) {
14 Poll::Pending => {
15 parker.park();
16 }
17 Poll::Ready(ret) => {
18 return ret;
19 }
20 }
21 }
22}