我想在poll()中休眠1秒,但它卡在Pending中,据我所知,我传递了它&mut cx,它应该会在1秒后唤醒当前任务。
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};
use std::time::{Duration};
struct MyDelay {}
impl Future for MyDelay {
type Output = ();
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
println!("poll");
let sleep = tokio::time::sleep(Duration::from_secs(1));
tokio::pin!(sleep);
sleep.poll(cx)
}
}
#[tokio::main]
async fn main() {
let delay = MyDelay{};
let a = delay.await;
dbg!(a);
}
1条答案
按热度按时间y53ybaqx1#
每一次投票都创造了一个新的
Sleep
未来,它从头开始。相反,您应该将
Sleep
存储在您的未来中。使用pin-project-lite
很容易:Playground.
请注意,轮询的次数并不一定,并且可能不是常数。