Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Join several tasks

use tokio::time::{Duration, sleep};

#[tokio::main]
async fn main() {
    let a = wait_random_time(String::from("a"));
    let b = wait_random_time(String::from("b"));
    tokio::join!(a, b);

    println!("---");

    let n = 3;
    let mut tasks = tokio::task::JoinSet::new();
    for i in 0..n {
        let name = format!("x-{i}");
        let task = wait_random_time(name);
        let _ = tasks.spawn(task);
    }
    while let Some(res) = tasks.join_next().await {
        match res {
            Ok(_) => {} //println!("Task finished successfully"),
            Err(e) => println!("Task failed: {e}"),
        }
    }
}

async fn wait_random_time(name: String) {
    let random_int = rand::random::<u64>() % 100;
    println!("{name} waiting for {random_int} milliseconds");
    sleep(Duration::from_millis(random_int)).await;
}
[package]
name = "demo"
version = "0.1.0"
edition = "2024"

[dependencies]
rand = "0.9.2"
tokio = { version = "1.47.1", features = ["full"] }