Токіо
Tokio надає:
- Багатопотокове середовище виконання для виконання асинхронного коду.
- Асинхронну версію стандартної бібліотеки.
- Велику екосистему бібліотек.
use tokio::time; async fn count_to(count: i32) { for i in 0..count { println!("Підрахунок у завданні: {i}!"); time::sleep(time::Duration::from_millis(5)).await; } } #[tokio::main] async fn main() { tokio::spawn(count_to(10)); for i in 0..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.