我正在构建一个服务器,希望服务到oneshot receiver通知我停止为止。为此,我使用tokios serve_with_shutdown。我的理解是,服务将运行到未来的signal
准备就绪为止
pub async fn serve_with_shutdown<F: Future<Output = ()>>(
self,
addr: SocketAddr,
signal: F
) -> Result<(), Error>
如何将单脉冲接收器作为信号传递?
像serve_with_shutdown(some_addr, receiver);
一样直接传递它给我unused implementer of futures::Future that must be used
。
我试着实现我自己的未来。同样的错误。
pub struct OneShotFut {
receiver: Mutex<tokio::sync::oneshot::Receiver<()>>,
}
impl Future for OneShotFut {
type Output = ();
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut rec = self.receiver.lock().unwrap();
if rec.try_recv().is_err() {
return Poll::Pending;
}
Poll::Ready(())
}
}
//...
serve_with_shutdown(some_addr, OneShotFut {
receiver: Mutex::new(receiver),
})
我不能等到将来再将ti传递给serve_with_shutdown
,因为那样会直接返回()
1条答案
按热度按时间bf1o4zei1#
由于
serve_with_shutdown
是一个async fn
,它返回一个Future
,也必须等待:里面还有一个
async fn
: