Токіо
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
.