Токіо

Tokio надає:

  • Багатопотокове середовище виконання для виконання асинхронного коду.
  • Асинхронну версію стандартної бібліотеки.
  • Велику екосистему бібліотек.
use tokio::time;

async fn count_to(count: i32) {
    for i in 1..=count {
        println!("Підрахунок у завданні: {i}!");
        time::sleep(time::Duration::from_millis(5)).await;
    }
}

#[tokio::main]
async fn main() {
    tokio::spawn(count_to(10));

    for i in 1..5 {
        println!("Основне завдання: {i}");
        time::sleep(time::Duration::from_millis(5)).await;
    }
}
  • За допомогою макросу tokio::main ми тепер можемо зробити main асинхронною.

  • Функція spawn створює нове, одночасне "завдання".

  • Примітка: spawn приймає Future, ви не викликаєте .await на count_to.

Подальше дослідження:

  • Чому count_to (зазвичай) не досягає 10? Це приклад асинхронного скасування. tokio::spawn повертає дескриптор, який можна чекати, поки він не завершиться.

  • Спробуйте count_to(10).await замість породження.

  • Спробуйте дочекатися завдання, повернутого з tokio::spawn.