Currently, BlockingRunner will wait for all futures that are running when the goal is reached, but then ignore their results. Looking at the code, AsyncRunner has the same behaviour.
This seems like a waste. I think it should just self._process_futures(remaining) after the wait.