Я переписываю будущее Forward
с Stream
на Sink
, добавляя тайм-аут при получении новых предметов.
Я использую будущее Delay
внутри структуры Forward
, чтобы отслеживать время ожидания, но результатом всегда является Error(Shutdown)
.
Из документации timer::Error
я вижу, что это должно возвращаться, только если будущее отброшено, но это не должно иметь место, так как оно все еще содержится в основной структуре.
Это минимальный тестовый пример, из которого я получаю тот же результат.
extern crate tokio; // 0.1.20
use std::thread::sleep;
use std::time::{Duration, Instant};
use tokio::prelude::*;
use tokio::timer::Delay;
fn main() {
let mut delay = Delay::new(Instant::now() + Duration::from_millis(3000));
sleep(Duration::from_millis(1000));
match delay.poll() {
Ok(Async::NotReady) => println!("Not ready"),
Ok(Async::Ready(v)) => println!("Ready: {:?}", v),
Err(e) => println!("{:?}", e),
}
}
Вы можете увидеть работающий пример здесь
Я ожидаю либо получить Async:Ready(v)
, где v
равно ()
.