diff --git a/msim/src/sim/task/join_set.rs b/msim/src/sim/task/join_set.rs index c50ffaf..449a2b6 100644 --- a/msim/src/sim/task/join_set.rs +++ b/msim/src/sim/task/join_set.rs @@ -87,6 +87,19 @@ impl JoinSet { while self.join_next().await.is_some() {} } + pub async fn join_all(mut self) -> Vec { + let mut output = Vec::with_capacity(self.len()); + + while let Some(res) = self.join_next().await { + match res { + Ok(t) => output.push(t), + Err(err) if err.is_panic() => std::panic::resume_unwind(err.into_panic()), + Err(err) => panic!("{err}"), + } + } + output + } + pub fn abort_all(&mut self) { self.inner.iter().for_each(|jh| jh.abort()); }