Introduce mpsc::Receiver peek #7156
Open
+387
−71
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 introduces a
peek
method to thempsc::Receiver
. This allows consumers to inspect the next message in the queue without removing it, enabling use cases that require lookahead behavior. Therecv
method has been modified to utilise peek: if a message is available,recv
reads the value, advances the internal queue, and updates the semaphore accordingly.Motivation
Currently, the
mpsc::Receiver
does not provide a way to inspect the next message in the queue without consuming it. Users may want to make decisions based on the upcoming message before actually removing it from the channel.Solution
The peek method retrieves the next message without modifying the queue state. It works by:
block.peek(self.index)
.block.peek(slot_index)
checks if the slot atslot_index
is ready usingready_offset_read
. If ready, it returns a reference to the value without modifying the queue.