futures_util

Macro try_join

Source
macro_rules! try_join {
    ($($tokens:tt)*) => { ... };
}
Expand description

Polls multiple futures simultaneously, resolving to a Result containing either a tuple of the successful outputs or an error.

try_join! is similar to join!, but completes immediately if any of the futures return an error.

This macro is only usable inside of async functions, closures, and blocks. It is also gated behind the async-await feature of this library, which is activated by default.

ยงExamples

When used on multiple futures that return Ok, try_join! will return Ok of a tuple of the values:

use futures::try_join;

let a = async { Ok::<i32, i32>(1) };
let b = async { Ok::<i32, i32>(2) };
assert_eq!(try_join!(a, b), Ok((1, 2)));

// `try_join!` is variadic, so you can pass any number of futures
let c = async { Ok::<i32, i32>(3) };
let d = async { Ok::<i32, i32>(4) };
let e = async { Ok::<i32, i32>(5) };
assert_eq!(try_join!(c, d, e), Ok((3, 4, 5)));

If one of the futures resolves to an error, try_join! will return that error:

use futures::try_join;

let a = async { Ok::<i32, i32>(1) };
let b = async { Err::<u64, i32>(2) };

assert_eq!(try_join!(a, b), Err(2));