Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a new type,
UnorderedFutures
, that stores and then polls a series of futures concurrently. I then go on to useUnorderedFutures
to implementfor_each_concurrent()
andtry_for_each_concurrent
, resolving #26.The implementation I use here is relatively inefficient. It uses two allocations per future stored; one for the
Container
, and another for the readiness flag. In addition, another allocation is added per poll for thewaker_fn
. Ideally, it would look more like this:Note that this would add a dependency on
libstd
andatomic-waker
, and would require unsafe code since it's impossible to get aPin<MutexGuard<T>>
from aPin<&Mutex<T>>
without unsafe code.However, since this is an implementation detail that can be resolved through a patch bump in the future, I decided to leave it with the as-is simple implementation.