use tspawn::{tspawn, A};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Basic tspawn Example ===\n");
let counter = A::new(0);
println!("Initial counter value: {}", counter.get());
counter.set(5);
println!("After set(5): {}", counter.get());
counter.update(|x| *x += 10);
println!("After update(|x| *x += 10): {}", counter.get());
let counter_clone = counter.clone();
counter_clone.update(|x| *x *= 2);
println!("After clone and multiply by 2: {}", counter.get());
println!("\n--- Async Task Examples ---");
tspawn!(ref counter, {
println!("Task 1 - Read access: {}", *counter);
})
.await?;
tspawn!(mut counter, {
*counter += 100;
println!("Task 2 - Write access, added 100: {}", *counter);
})
.await?;
tspawn!(counter, {
let value = counter.get();
println!("Task 3 - Clone access: {}", value);
counter.update(|x| *x += 1);
println!("Task 3 - After increment: {}", counter.get());
})
.await?;
println!("\nFinal counter value: {}", counter.get());
Ok(())
}