Xuanwo commented on code in PR #3599:
URL:
https://github.com/apache/incubator-opendal/pull/3599#discussion_r1401571320
##########
core/src/types/list.rs:
##########
@@ -80,44 +83,81 @@ impl Stream for Lister {
return Poll::Ready(None);
}
- if let Some(fut) = self.stating.as_mut() {
- let (path, rp) = ready!(fut.poll_unpin(cx));
-
- // Make sure we will not poll this future again.
- self.stating = None;
- let metadata = match rp {
- Ok(rp) => rp.into_metadata(),
+ while self.task_queue.len() < self.task_queue.capacity() {
+ match ready!(self.lister.poll_next(cx)) {
Review Comment:
> I'm confused, doesn't that result in only one join handle being created as
we discussed earlier?
The trick is to perform work while `poll_next` returns `Pending` instead of
returning directly. Loop here will add the lantency for `Lister` to return
entries, users will need to fill the whole taks queue until they got their
first entry.
##########
core/src/types/list.rs:
##########
@@ -80,44 +83,81 @@ impl Stream for Lister {
return Poll::Ready(None);
}
- if let Some(fut) = self.stating.as_mut() {
- let (path, rp) = ready!(fut.poll_unpin(cx));
-
- // Make sure we will not poll this future again.
- self.stating = None;
- let metadata = match rp {
- Ok(rp) => rp.into_metadata(),
+ while self.task_queue.len() < self.task_queue.capacity() {
+ match ready!(self.lister.poll_next(cx)) {
Review Comment:
> I'm confused, doesn't that result in only one join handle being created as
we discussed earlier?
The trick is to perform other works while `poll_next` returns `Pending`
instead of returning directly. Loop here will add the lantency for `Lister` to
return entries, users will need to fill the whole taks queue until they got
their first entry.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]