#[macro_export]
macro_rules! sync_join {
($($fut:expr),+ $(,)?) => {{
use tokio::sync::Barrier;
use std::sync::Arc;
let future_count = [$($fut),+].len();
let barrier = std::sync::Arc::new(tokio::sync::Barrier::new(future_count));
tokio::join!(
$({
let barrier = barrier.clone();
async move {
let result = $fut.await?;
barrier.wait().await;
Ok(result)
}
}),+
)
}};
}
#[macro_export]
macro_rules! sync_try_join {
($($fut:expr),+ $(,)?) => {{
let future_count = [$($fut),+].len();
let barrier = std::sync::Arc::new(tokio::sync::Barrier::new(future_count));
tokio::try_join!(
$({
let barrier = barrier.clone();
async move {
let result = $fut.await?;
barrier.wait().await;
Ok(result)
}
}),+
)
}};
}