fn poll_pool(&mut self, cx: &mut Context<'_>) -> Poll<()> {
        loop {
            self.drain_incoming();

            let pool_ret = self.pool.poll_next_unpin(cx);

            // We queued up some new tasks; add them and poll again.
            if !self.incoming.borrow().is_empty() {
                continue;
            }

            match pool_ret {
                Poll::Ready(Some(())) => continue,
                Poll::Ready(None) => return Poll::Ready(()),
                Poll::Pending => return Poll::Pending,
            }
        }
    }
Poll `self.pool`, re-filling it with any newly-spawned tasks.
Repeat until either the pool is empty, or it returns `Pending`.

Returns `Ready` if the pool was empty, and `Pending` otherwise.

NOTE: the pool may call `wake`, so `Pending` doesn't necessarily
mean that the pool can't make progress.
futures-executor/src/local_pool.rs