Expand description

Concurrency extensions for Future and Stream.

Companion library for the “Futures Concurrency” blog post series:

The purpose of this library is to serve as a staging ground for what eventually may become the futures concurrency methods provided by the stdlib. See the future and stream submodules for more.

Limitations

Because of orphan rules this library can’t implement everything the stdlib can. The missing implementations are:

  • impl<T> IntoFuture for Vec<T>
  • impl<T, const N: usize> IntoFuture for [T; N]
  • impl<T..> IntoFuture for (T..)
  • impl<T> IntoAsyncIterator for Vec<T>
  • impl<T, const N: usize> IntoAsyncIterator for [T; N]
  • impl<T..> IntoAsyncIterator for (T..)

This would enable containers of futures to directly be .awaited to get merge semantics. Or containers of async iterators to be passed directly to for..await in loops to be iterated over using merge semantics. This would remove the need to think of “merge” as a verb, and would enable treating sets of futures concurrently.

Examples

Concurrently await multiple heterogenous futures:

use futures_concurrency::prelude::*;
use futures_lite::future::block_on;
use std::future;

fn main() {
    block_on(async {
        let a = future::ready(1u8);
        let b = future::ready("hello");
        let c = future::ready(3u16);
        assert_eq!((a, b, c).merge().await, (1, "hello", 3));
    })
}

Modules

Helper functions and types for fixed-length arrays.
Asynchronous basic functionality.
The futures concurrency prelude.
Composable asynchronous iteration.
A contiguous growable array type with heap-allocated contents, written Vec<T>.