我想构建一个收集天气更新并将其表示为流的程序。我想无限循环地调用get_weather()
,在完成和开始之间有60秒的延迟。
简化版本如下:
async fn get_weather() -> Weather { /* ... */ }
fn get_weather_stream() -> impl futures::Stream<Item = Weather> {
loop {
tokio::timer::delay_for(std::time::Duration::from_secs(60)).await;
let weather = get_weather().await;
yield weather; // This is not supported
// Note: waiting for get_weather() stops the timer and avoids overflows.
}
}
有什么方法可以轻松地做到这一点吗?
tokio::timer::Interval
花费60秒以上时,无法使用get_weather()
:
fn get_weather_stream() -> impl futures::Stream<Item = Weather> {
tokio::timer::Interval::new_with_delay(std::time::Duration::from_secs(60))
.then(|| get_weather())
}
如果发生这种情况,下一个功能将立即启动。我想在上一个get_weather()
开始和下一个get_weather()
开始之间保持60秒的时间。