Skip to main content

DurableFuturesUnordered

Struct DurableFuturesUnordered 

Source
pub struct DurableFuturesUnordered<F> { /* private fields */ }
Expand description

A collection of durable futures that yields results as they complete, similar to futures::stream::FuturesUnordered.

Each future is assigned a stable index when pushed, which is returned alongside the result from next so you can correlate outputs with inputs.

§Example

let labels = vec!["fast", "medium", "slow"];
let durations = vec![1, 2, 3];

let mut futures = DurableFuturesUnordered::new();
for secs in &durations {
    futures.push(ctx.sleep(Duration::from_secs(*secs)));
}

while let Some((index, result)) = futures.next().await? {
    result?;
    println!("{} timer done!", labels[index]);
}

You can also collect into it from an iterator:

let durations = vec![1, 2, 3];
let mut futures: DurableFuturesUnordered<_> = durations
    .iter()
    .map(|secs| ctx.sleep(Duration::from_secs(*secs)))
    .collect();

while let Some((index, result)) = futures.next().await? {
    result?;
}

Implementations§

Source§

impl<F> DurableFuturesUnordered<F>

Source

pub fn new() -> Self

Create an empty collection.

Source

pub fn push(&mut self, future: F) -> usize

Add a durable future to the collection. Returns the stable index assigned to this future.

Source

pub fn is_empty(&self) -> bool

Returns true if there are no remaining futures.

Source

pub fn len(&self) -> usize

Returns the number of remaining futures.

Source§

impl<F: DurableFuture> DurableFuturesUnordered<F>

Source

pub async fn next( &mut self, ) -> Result<Option<(usize, F::Output)>, TerminalError>

Await the next completed future.

Returns Ok(None) if there are no remaining futures. Returns Err(TerminalError) if the invocation was cancelled. Returns Ok(Some((index, output))) with the stable index and output of the next completed future.

Trait Implementations§

Source§

impl<F> Default for DurableFuturesUnordered<F>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<F> FromIterator<F> for DurableFuturesUnordered<F>

Source§

fn from_iter<I: IntoIterator<Item = F>>(iter: I) -> Self

Creates a value from an iterator. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more