mirror of
https://github.com/async-rs/async-std.git
synced 2025-01-30 01:05:31 +00:00
fix Stream::throttle hot loop (#584)
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
This commit is contained in:
parent
794e331761
commit
68005661d9
2 changed files with 8 additions and 20 deletions
|
@ -336,28 +336,19 @@ extension_trait! {
|
|||
let start = Instant::now();
|
||||
|
||||
// emit value every 5 milliseconds
|
||||
let s = stream::interval(Duration::from_millis(5))
|
||||
.enumerate()
|
||||
.take(3);
|
||||
let s = stream::interval(Duration::from_millis(5)).take(2);
|
||||
|
||||
// throttle for 10 milliseconds
|
||||
let mut s = s.throttle(Duration::from_millis(10));
|
||||
|
||||
assert_eq!(s.next().await, Some((0, ())));
|
||||
let duration_ms = start.elapsed().as_millis();
|
||||
assert!(duration_ms >= 5);
|
||||
s.next().await;
|
||||
assert!(start.elapsed().as_millis() >= 5);
|
||||
|
||||
assert_eq!(s.next().await, Some((1, ())));
|
||||
let duration_ms = start.elapsed().as_millis();
|
||||
assert!(duration_ms >= 15);
|
||||
s.next().await;
|
||||
assert!(start.elapsed().as_millis() >= 15);
|
||||
|
||||
assert_eq!(s.next().await, Some((2, ())));
|
||||
let duration_ms = start.elapsed().as_millis();
|
||||
assert!(duration_ms >= 25);
|
||||
|
||||
assert_eq!(s.next().await, None);
|
||||
let duration_ms = start.elapsed().as_millis();
|
||||
assert!(duration_ms >= 35);
|
||||
s.next().await;
|
||||
assert!(start.elapsed().as_millis() >= 35);
|
||||
#
|
||||
# }) }
|
||||
```
|
||||
|
|
|
@ -55,10 +55,7 @@ impl<S: Stream> Stream for Throttle<S> {
|
|||
}
|
||||
|
||||
match this.stream.poll_next(cx) {
|
||||
Poll::Pending => {
|
||||
cx.waker().wake_by_ref(); // Continue driving even though emitting Pending
|
||||
Poll::Pending
|
||||
}
|
||||
Poll::Pending => Poll::Pending,
|
||||
Poll::Ready(None) => Poll::Ready(None),
|
||||
Poll::Ready(Some(v)) => {
|
||||
*this.blocked = true;
|
||||
|
|
Loading…
Reference in a new issue