Tokio
Tokio предоставляет:
- Многопоточный рантайм для выполнения асинхронного кода.
- Асинхронную версию стандартной библиотеки.
- Большую экосистему библиотек.
// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0
use tokio::time;
async fn count_to(count: i32) {
for i in 0..count {
println!("Count in task: {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!("Main task: {i}");
time::sleep(time::Duration::from_millis(5)).await;
}
}
-
С помощью макроса
tokio::mainмы теперь можем сделатьmainасинхронной. -
Функция
spawnсоздаёт новую конкурентную «задачу». -
Примечание:
spawnпринимаетFuture, поэтому не нужно вызывать.awaitуcount_to.
Дальнейшее изучение:
-
Почему
count_toне доходит до 10? Это пример отмены асинхронной операции.tokio::spawnвозвращает дескриптор, который можно дождаться через.await, чтобы подождать его завершения. -
Попробуйте
count_to(10).awaitвместо запуска в отдельной задаче. -
Попробуйте дождаться задачи, возвращённой из
tokio::spawn.