veilid_tools/
future_queue.rs1use super::*;
2use futures_util::StreamExt as _;
3use stop_token::future::FutureExt as _;
4
5pub async fn process_batched_future_queue<I, C, F, R>(
6 future_queue: I,
7 batch_size: usize,
8 stop_token: StopToken,
9 result_callback: C,
10) where
11 I: IntoIterator,
12 C: Fn(R) -> F,
13 F: Future<Output = ()>,
14 <I as std::iter::IntoIterator>::Item: core::future::Future<Output = R>,
15{
16 let mut buffered_futures =
17 futures_util::stream::iter(future_queue).buffer_unordered(batch_size);
18 while let Ok(Some(res)) = buffered_futures.next().timeout_at(stop_token.clone()).await {
19 result_callback(res).await;
20 }
21}