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