#![cfg(feature = "tokio")]
use std::time::Duration;
use await_tree::{Config, InstrumentAwait, Registry};
use futures::future::pending;
use tokio::time::sleep;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
struct Actor(usize);
async fn actor(i: usize) {
await_tree::spawn_anonymous(format!("background task {i}"), async {
pending::<()>().await;
})
.instrument_await("waiting for background task")
.await
.unwrap();
}
#[tokio::main]
async fn main() {
let registry = Registry::new(Config::default());
for i in 0..3 {
let root = registry.register(Actor(i), format!("actor {i}"));
tokio::spawn(root.instrument(actor(i)));
}
sleep(Duration::from_secs(1)).await;
for (_actor, tree) in registry.collect::<Actor>() {
println!("{tree}");
}
for tree in registry.collect_anonymous() {
println!("{tree}");
}
}