1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use
{
std::{ future::Future, pin::Pin, task::{ Context, Poll } } ,
blanket::blanket,
};
#[ blanket( derive(Ref, Mut, Arc, Rc, Box) ) ]
pub trait YieldNow
{
fn yield_now( &self ) -> YieldNowFut
{
YieldNowFut{ done: false }
}
}
#[must_use = "YieldNowFut doesn't do anything unless polled or awaited."]
#[ derive( Debug, Copy, Clone ) ]
pub struct YieldNowFut
{
pub(crate) done: bool,
}
impl Future for YieldNowFut
{
type Output = ();
fn poll( mut self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<()>
{
if self.done
{
return Poll::Ready(());
}
self.done = true;
cx.waker().wake_by_ref();
Poll::Pending
}
}