mod common;
use
{
async_executors :: { AsyncStd, TimerExt } ,
async_nursery :: { Nursery, NurseExt } ,
common :: { DynResult, setup_tracing } ,
futures_timer :: { Delay } ,
std :: { time::Duration } ,
tracing_crate :: { info } ,
};
async fn resource_await( amount: usize ) -> DynResult<()>
{
let (nursery, output) = Nursery::new( AsyncStd ); info!( "nursery created" );
let delay = Duration::from_secs(2);
for i in 0..amount
{
let task = nursery.timeout( delay, slow(i) );
nursery.nurse( task )?;
}
drop(nursery);
output.await;
info!( "drop Nursery and NurseryStream" );
Ok(())
}
async fn slow( seconds: usize ) -> DynResult<()>
{
info!( "spawned slow {}", seconds );
Delay::new( Duration::from_secs(seconds as u64) ).await;
info!( "completed slow {}", seconds );
Ok(())
}
#[ async_std::main ]
async fn main() -> DynResult<()>
{
setup_tracing();
resource_await( 5 ).await?;
Ok(())
}