struct SymmetricHashJoinStream<T> {Show 17 fields
left_stream: SendableRecordBatchStream,
right_stream: SendableRecordBatchStream,
schema: Arc<Schema>,
filter: Option<JoinFilter>,
join_type: JoinType,
left: OneSideHashJoiner,
right: OneSideHashJoiner,
column_indices: Vec<ColumnIndex>,
graph: Option<ExprIntervalGraph>,
left_sorted_filter_expr: Option<SortedFilterExpr>,
right_sorted_filter_expr: Option<SortedFilterExpr>,
random_state: RandomState,
null_equality: NullEquality,
metrics: StreamJoinMetrics,
reservation: Arc<Mutex<MemoryReservation>>,
state: SHJStreamState,
batch_transformer: T,
}Expand description
A stream that issues [RecordBatch]es as they arrive from the right of the join.
Fields§
§left_stream: SendableRecordBatchStreamInput streams
right_stream: SendableRecordBatchStream§schema: Arc<Schema>Input schema
filter: Option<JoinFilter>join filter
join_type: JoinTypetype of the join
left: OneSideHashJoiner§right: OneSideHashJoinerright hash joiner
column_indices: Vec<ColumnIndex>Information of index and left / right placement of columns
graph: Option<ExprIntervalGraph>§left_sorted_filter_expr: Option<SortedFilterExpr>§right_sorted_filter_expr: Option<SortedFilterExpr>§random_state: RandomStateRandom state used for hashing initialization
null_equality: NullEqualityDefines the null equality for the join.
metrics: StreamJoinMetricsMetrics
reservation: Arc<Mutex<MemoryReservation>>Memory reservation
state: SHJStreamStateState machine for input execution
batch_transformer: TTransforms the output batch before returning.
Implementations§
Source§impl<T: BatchTransformer> SymmetricHashJoinStream<T>
SymmetricHashJoinStream manages incremental join operations between two
streams. Unlike traditional join approaches that need to scan one side of
the join fully before proceeding, SymmetricHashJoinStream facilitates
more dynamic join operations by working with streams as they emit data. This
approach allows for more efficient processing, particularly in scenarios
where waiting for complete data materialization is not feasible or optimal.
The trait provides a framework for handling various states of such a join
process, ensuring that join logic is efficiently executed as data becomes
available from either stream.
impl<T: BatchTransformer> SymmetricHashJoinStream<T>
SymmetricHashJoinStream manages incremental join operations between two
streams. Unlike traditional join approaches that need to scan one side of
the join fully before proceeding, SymmetricHashJoinStream facilitates
more dynamic join operations by working with streams as they emit data. This
approach allows for more efficient processing, particularly in scenarios
where waiting for complete data materialization is not feasible or optimal.
The trait provides a framework for handling various states of such a join
process, ensuring that join logic is efficiently executed as data becomes
available from either stream.
This implementation performs eager joins of data from two different asynchronous
streams, typically referred to as left and right streams. The implementation
provides a comprehensive set of methods to control and execute the join
process, leveraging the states defined in SHJStreamState. Methods are
primarily focused on asynchronously fetching data batches from each stream,
processing them, and managing transitions between various states of the join.
This implementations use a state machine approach to navigate different stages of the join operation, handling data from both streams and determining when the join completes.
State Transitions:
- From
PullLefttoPullRightorLeftExhausted:- In
fetch_next_from_left_stream, when fetching a batch from the left stream:- On success (
Some(Ok(batch))), state transitions toPullRightfor processing the batch. - On error (
Some(Err(e))), the error is returned, and the state remains unchanged. - On no data (
None), state changes toLeftExhausted, returningContinueto proceed with the join process.
- On success (
- In
- From
PullRighttoPullLeftorRightExhausted:- In
fetch_next_from_right_stream, when fetching from the right stream:- If a batch is available, state changes to
PullLeftfor processing. - On error, the error is returned without changing the state.
- If right stream is exhausted (
None), state transitions toRightExhausted, with aContinueresult.
- If a batch is available, state changes to
- In
- Handling
RightExhaustedandLeftExhausted:- Methods
handle_right_stream_endandhandle_left_stream_endmanage scenarios when streams are exhausted:- They attempt to continue processing with the other stream.
- If both streams are exhausted, state changes to
BothExhausted { final_result: false }.
- Methods
- Transition to
BothExhausted { final_result: true }:- Occurs in
prepare_for_final_results_after_exhaustionwhen both streams are exhausted, indicating completion of processing and availability of final results.
- Occurs in
Sourcefn poll_next_impl(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Option<Result<RecordBatch>>>
fn poll_next_impl( &mut self, cx: &mut Context<'_>, ) -> Poll<Option<Result<RecordBatch>>>
Implements the main polling logic for the join stream.
This method continuously checks the state of the join stream and acts accordingly by delegating the handling to appropriate sub-methods depending on the current state.
§Arguments
cx- A context that facilitates cooperative non-blocking execution within a task.
§Returns
Poll<Option<Result<RecordBatch>>>- A polled result, either aRecordBatchor None.
Sourcefn fetch_next_from_right_stream(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
fn fetch_next_from_right_stream( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
Asynchronously pulls the next batch from the right stream.
This default implementation checks for the next value in the right stream.
If a batch is found, the state is switched to PullLeft, and the batch handling
is delegated to process_batch_from_right. If the stream ends, the state is set to RightExhausted.
§Returns
Result<StatefulStreamResult<Option<RecordBatch>>>- The state result after pulling the batch.
Sourcefn fetch_next_from_left_stream(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
fn fetch_next_from_left_stream( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
Asynchronously pulls the next batch from the left stream.
This default implementation checks for the next value in the left stream.
If a batch is found, the state is switched to PullRight, and the batch handling
is delegated to process_batch_from_left. If the stream ends, the state is set to LeftExhausted.
§Returns
Result<StatefulStreamResult<Option<RecordBatch>>>- The state result after pulling the batch.
Sourcefn handle_right_stream_end(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
fn handle_right_stream_end( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
Asynchronously handles the scenario when the right stream is exhausted.
In this default implementation, when the right stream is exhausted, it attempts
to pull from the left stream. If a batch is found in the left stream, it delegates
the handling to process_batch_from_left. If both streams are exhausted, the state is set
to indicate both streams are exhausted without final results yet.
§Returns
Result<StatefulStreamResult<Option<RecordBatch>>>- The state result after checking the exhaustion state.
Sourcefn handle_left_stream_end(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
fn handle_left_stream_end( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<StatefulStreamResult<Option<RecordBatch>>>>
Asynchronously handles the scenario when the left stream is exhausted.
When the left stream is exhausted, this default
implementation tries to pull from the right stream and delegates the batch
handling to process_batch_after_left_end. If both streams are exhausted, the state
is updated to indicate so.
§Returns
Result<StatefulStreamResult<Option<RecordBatch>>>- The state result after checking the exhaustion state.
Sourcefn prepare_for_final_results_after_exhaustion(
&mut self,
) -> Result<StatefulStreamResult<Option<RecordBatch>>>
fn prepare_for_final_results_after_exhaustion( &mut self, ) -> Result<StatefulStreamResult<Option<RecordBatch>>>
Handles the state when both streams are exhausted and final results are yet to be produced.
This default implementation switches the state to indicate both streams are
exhausted with final results and then invokes the handling for this specific
scenario via process_batches_before_finalization.
§Returns
Result<StatefulStreamResult<Option<RecordBatch>>>- The state result after both streams are exhausted.
fn process_batch_from_right( &mut self, batch: RecordBatch, ) -> Result<StatefulStreamResult<Option<RecordBatch>>>
fn process_batch_from_left( &mut self, batch: RecordBatch, ) -> Result<StatefulStreamResult<Option<RecordBatch>>>
fn process_batch_after_left_end( &mut self, right_batch: RecordBatch, ) -> Result<StatefulStreamResult<Option<RecordBatch>>>
fn process_batch_after_right_end( &mut self, left_batch: RecordBatch, ) -> Result<StatefulStreamResult<Option<RecordBatch>>>
fn process_batches_before_finalization( &mut self, ) -> Result<StatefulStreamResult<Option<RecordBatch>>>
fn right_stream(&mut self) -> &mut SendableRecordBatchStream
fn left_stream(&mut self) -> &mut SendableRecordBatchStream
fn set_state(&mut self, state: SHJStreamState)
fn state(&mut self) -> SHJStreamState
fn size(&self) -> usize
Sourcefn perform_join_for_given_side(
&mut self,
probe_batch: RecordBatch,
probe_side: JoinSide,
) -> Result<Option<RecordBatch>>
fn perform_join_for_given_side( &mut self, probe_batch: RecordBatch, probe_side: JoinSide, ) -> Result<Option<RecordBatch>>
Performs a join operation for the specified probe_side (either left or right).
This function:
- Determines which side is the probe and which is the build side.
- Updates metrics based on the batch that was polled.
- Executes the join with the given
probe_batch. - Optionally computes anti-join results if all conditions are met.
- Combines the results and returns a combined batch or
Noneif no batch was produced.
Trait Implementations§
Source§impl<T: BatchTransformer + Unpin + Send> RecordBatchStream for SymmetricHashJoinStream<T>
impl<T: BatchTransformer + Unpin + Send> RecordBatchStream for SymmetricHashJoinStream<T>
Source§impl<T: BatchTransformer + Unpin + Send> Stream for SymmetricHashJoinStream<T>
impl<T: BatchTransformer + Unpin + Send> Stream for SymmetricHashJoinStream<T>
Source§type Item = Result<RecordBatch, DataFusionError>
type Item = Result<RecordBatch, DataFusionError>
Auto Trait Implementations§
impl<T> Freeze for SymmetricHashJoinStream<T>where
T: Freeze,
impl<T> !RefUnwindSafe for SymmetricHashJoinStream<T>
impl<T> Send for SymmetricHashJoinStream<T>where
T: Send,
impl<T> !Sync for SymmetricHashJoinStream<T>
impl<T> Unpin for SymmetricHashJoinStream<T>where
T: Unpin,
impl<T> !UnwindSafe for SymmetricHashJoinStream<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> StreamExt for Twhere
T: Stream + ?Sized,
impl<T> StreamExt for Twhere
T: Stream + ?Sized,
§fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
§fn into_future(self) -> StreamFuture<Self>
fn into_future(self) -> StreamFuture<Self>
§fn map<T, F>(self, f: F) -> Map<Self, F>
fn map<T, F>(self, f: F) -> Map<Self, F>
§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
§fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>
fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>
§fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>
fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>
§fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
§fn collect<C>(self) -> Collect<Self, C>
fn collect<C>(self) -> Collect<Self, C>
§fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>
fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>
§fn concat(self) -> Concat<Self>
fn concat(self) -> Concat<Self>
§fn count(self) -> Count<Self>where
Self: Sized,
fn count(self) -> Count<Self>where
Self: Sized,
§fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>
fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>
§fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>
fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>
true if any element in stream satisfied a predicate. Read more§fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>
fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>
true if all element in stream satisfied a predicate. Read more§fn flatten(self) -> Flatten<Self>where
Self::Item: Stream,
Self: Sized,
fn flatten(self) -> Flatten<Self>where
Self::Item: Stream,
Self: Sized,
§fn flatten_unordered(
self,
limit: impl Into<Option<usize>>,
) -> FlattenUnorderedWithFlowController<Self, ()>
fn flatten_unordered( self, limit: impl Into<Option<usize>>, ) -> FlattenUnorderedWithFlowController<Self, ()>
§fn flat_map_unordered<U, F>(
self,
limit: impl Into<Option<usize>>,
f: F,
) -> FlatMapUnordered<Self, U, F>
fn flat_map_unordered<U, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> FlatMapUnordered<Self, U, F>
StreamExt::map] but flattens nested Streams
and polls them concurrently, yielding items in any order, as they made
available. Read more§fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>
fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>
StreamExt::fold] that holds internal state
and produces a new stream. Read more§fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>
fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>
true. Read more§fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>
fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>
true. Read more§fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>
fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>
§fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>
fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>
§fn for_each_concurrent<Fut, F>(
self,
limit: impl Into<Option<usize>>,
f: F,
) -> ForEachConcurrent<Self, Fut, F>
fn for_each_concurrent<Fut, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> ForEachConcurrent<Self, Fut, F>
§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n items of the underlying stream. Read more§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n items of the underlying stream. Read more§fn catch_unwind(self) -> CatchUnwind<Self>where
Self: Sized + UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self>where
Self: Sized + UnwindSafe,
§fn boxed<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a>>
fn boxed<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a>>
§fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a>>where
Self: Sized + 'a,
fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a>>where
Self: Sized + 'a,
§fn buffered(self, n: usize) -> Buffered<Self>
fn buffered(self, n: usize) -> Buffered<Self>
§fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
§fn zip<St>(self, other: St) -> Zip<Self, St>where
St: Stream,
Self: Sized,
fn zip<St>(self, other: St) -> Zip<Self, St>where
St: Stream,
Self: Sized,
§fn chain<St>(self, other: St) -> Chain<Self, St>where
St: Stream<Item = Self::Item>,
Self: Sized,
fn chain<St>(self, other: St) -> Chain<Self, St>where
St: Stream<Item = Self::Item>,
Self: Sized,
§fn peekable(self) -> Peekable<Self>where
Self: Sized,
fn peekable(self) -> Peekable<Self>where
Self: Sized,
peek method. Read more§fn chunks(self, capacity: usize) -> Chunks<Self>where
Self: Sized,
fn chunks(self, capacity: usize) -> Chunks<Self>where
Self: Sized,
§fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>where
Self: Sized,
fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>where
Self: Sized,
§fn forward<S>(self, sink: S) -> Forward<Self, S>where
S: Sink<Self::Ok, Error = Self::Error>,
Self: Sized + TryStream,
fn forward<S>(self, sink: S) -> Forward<Self, S>where
S: Sink<Self::Ok, Error = Self::Error>,
Self: Sized + TryStream,
§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
§fn left_stream<B>(self) -> Either<Self, B>where
B: Stream<Item = Self::Item>,
Self: Sized,
fn left_stream<B>(self) -> Either<Self, B>where
B: Stream<Item = Self::Item>,
Self: Sized,
§fn right_stream<B>(self) -> Either<B, Self>where
B: Stream<Item = Self::Item>,
Self: Sized,
fn right_stream<B>(self) -> Either<B, Self>where
B: Stream<Item = Self::Item>,
Self: Sized,
§fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>where
Self: Unpin,
fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>where
Self: Unpin,
Stream::poll_next] on Unpin
stream types.§fn select_next_some(&mut self) -> SelectNextSome<'_, Self>where
Self: Unpin + FusedStream,
fn select_next_some(&mut self) -> SelectNextSome<'_, Self>where
Self: Unpin + FusedStream,
§impl<S, T, E> TryStream for S
impl<S, T, E> TryStream for S
§impl<S> TryStreamExt for Swhere
S: TryStream + ?Sized,
impl<S> TryStreamExt for Swhere
S: TryStream + ?Sized,
§fn err_into<E>(self) -> ErrInto<Self, E>
fn err_into<E>(self) -> ErrInto<Self, E>
§fn map_ok<T, F>(self, f: F) -> MapOk<Self, F>
fn map_ok<T, F>(self, f: F) -> MapOk<Self, F>
§fn map_err<E, F>(self, f: F) -> MapErr<Self, F>
fn map_err<E, F>(self, f: F) -> MapErr<Self, F>
§fn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F>
fn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F>
f. Read more§fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>
fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>
f. Read more§fn inspect_ok<F>(self, f: F) -> InspectOk<Self, F>
fn inspect_ok<F>(self, f: F) -> InspectOk<Self, F>
§fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>
fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>
§fn into_stream(self) -> IntoStream<Self>where
Self: Sized,
fn into_stream(self) -> IntoStream<Self>where
Self: Sized,
§fn try_next(&mut self) -> TryNext<'_, Self>where
Self: Unpin,
fn try_next(&mut self) -> TryNext<'_, Self>where
Self: Unpin,
§fn try_for_each<Fut, F>(self, f: F) -> TryForEach<Self, Fut, F>
fn try_for_each<Fut, F>(self, f: F) -> TryForEach<Self, Fut, F>
§fn try_skip_while<Fut, F>(self, f: F) -> TrySkipWhile<Self, Fut, F>
fn try_skip_while<Fut, F>(self, f: F) -> TrySkipWhile<Self, Fut, F>
true. Read more§fn try_take_while<Fut, F>(self, f: F) -> TryTakeWhile<Self, Fut, F>
fn try_take_while<Fut, F>(self, f: F) -> TryTakeWhile<Self, Fut, F>
true. Read more§fn try_for_each_concurrent<Fut, F>(
self,
limit: impl Into<Option<usize>>,
f: F,
) -> TryForEachConcurrent<Self, Fut, F>
fn try_for_each_concurrent<Fut, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> TryForEachConcurrent<Self, Fut, F>
§fn try_collect<C>(self) -> TryCollect<Self, C>
fn try_collect<C>(self) -> TryCollect<Self, C>
§fn try_chunks(self, capacity: usize) -> TryChunks<Self>where
Self: Sized,
fn try_chunks(self, capacity: usize) -> TryChunks<Self>where
Self: Sized,
§fn try_ready_chunks(self, capacity: usize) -> TryReadyChunks<Self>where
Self: Sized,
fn try_ready_chunks(self, capacity: usize) -> TryReadyChunks<Self>where
Self: Sized,
§fn try_filter<Fut, F>(self, f: F) -> TryFilter<Self, Fut, F>
fn try_filter<Fut, F>(self, f: F) -> TryFilter<Self, Fut, F>
§fn try_filter_map<Fut, F, T>(self, f: F) -> TryFilterMap<Self, Fut, F>
fn try_filter_map<Fut, F, T>(self, f: F) -> TryFilterMap<Self, Fut, F>
§fn try_flatten_unordered(
self,
limit: impl Into<Option<usize>>,
) -> TryFlattenUnordered<Self>
fn try_flatten_unordered( self, limit: impl Into<Option<usize>>, ) -> TryFlattenUnordered<Self>
§fn try_flatten(self) -> TryFlatten<Self>
fn try_flatten(self) -> TryFlatten<Self>
§fn try_fold<T, Fut, F>(self, init: T, f: F) -> TryFold<Self, Fut, T, F>
fn try_fold<T, Fut, F>(self, init: T, f: F) -> TryFold<Self, Fut, T, F>
§fn try_concat(self) -> TryConcat<Self>
fn try_concat(self) -> TryConcat<Self>
§fn try_buffer_unordered(self, n: usize) -> TryBufferUnordered<Self>where
Self::Ok: TryFuture<Error = Self::Error>,
Self: Sized,
fn try_buffer_unordered(self, n: usize) -> TryBufferUnordered<Self>where
Self::Ok: TryFuture<Error = Self::Error>,
Self: Sized,
§fn try_buffered(self, n: usize) -> TryBuffered<Self>where
Self::Ok: TryFuture<Error = Self::Error>,
Self: Sized,
fn try_buffered(self, n: usize) -> TryBuffered<Self>where
Self::Ok: TryFuture<Error = Self::Error>,
Self: Sized,
§fn try_poll_next_unpin(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Self::Ok, Self::Error>>>where
Self: Unpin,
fn try_poll_next_unpin(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Self::Ok, Self::Error>>>where
Self: Unpin,
TryStream::try_poll_next] on Unpin
stream types.§fn into_async_read(self) -> IntoAsyncRead<Self>
fn into_async_read(self) -> IntoAsyncRead<Self>
AsyncBufRead. Read more§fn try_all<Fut, F>(self, f: F) -> TryAll<Self, Fut, F>
fn try_all<Fut, F>(self, f: F) -> TryAll<Self, Fut, F>
Err is encountered or if an Ok item is found
that does not satisfy the predicate. Read more