macros: select! not evaluate async expression if precondition fails #6555
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.
Motivation
This permits following code without a panic.
Currently,
<async expression>
inselect!
is evaluated regardless of its precondition. I, personally, think usually async expression is guarded for a reason that it is probably not in a valid state. There are might be cases the evaluation of async expression is pure with side effect, but it is not always. So, I think it might be better to guard evaluation by its precondition.Solution
Fill futures tuple with
None
initially and fill them up only if precondition succeed.Question
I have not polished the code. Before that, I want to make up an agreement.
Does this sound and do we want this ? This is most likely a breaking change. No sure whether we are depending on this subtlety.
Origins
This comes from my experiment in async_select::select.