mod common;
use
{
async_executors :: { AsyncStd } ,
async_nursery :: { Nursery, Nurse, NurseExt } ,
common :: { DynResult, setup_tracing } ,
futures_timer :: { Delay } ,
std :: { time::Duration } ,
tracing_crate :: { info } ,
};
async fn subtask_spawn( amount: usize, nursery: impl Nurse<DynResult<()>> ) -> DynResult<()>
{
for i in 1..=amount
{
nursery.nurse( slow(i) )?;
}
info!( "end of subtask_spawn." );
Ok(())
}
async fn slow( i: usize ) -> DynResult<()>
{
info!( "spawned slow: {}", i );
Delay::new( Duration::from_secs(3) ).await;
info!( "ended slow: {}", i );
Ok(())
}
#[ async_std::main ]
async fn main() -> DynResult<()>
{
setup_tracing();
let (nursery, output) = Nursery::new( AsyncStd ); info!( "nursery created" );
nursery.nurse( subtask_spawn(5, nursery.clone()) )?;
drop(nursery);
output.await;
Ok(())
}