The Rust join! macro waits for multiple asynchronous computations and completes only after every supplied task has completed. With Tokio, it is used inside an async main function to coordinate concurrently scheduled work. section 10.2
Joining two file reads
An async main function spawns two Tokio tasks for simulated file reads, then evaluates tokio::join!(h1, h2). Each task must await its asynchronous read; without .await, the lazy functions do not execute. The sample output shows file 2 completing before file 1, while join! waits for both. section 10.2

